サーバーが再起動されるたびに、ディレクトリ/ run/httpdが削除されます。/runはtmpfsファイルシステムであるため、RAMにマウントされます。
/ run/httpdはインストール時にのみ作成されます。再起動後にhttpdを起動すると、ディレクトリが再作成されません。
サーバーにはCentOS 7と公式リポジトリApacheパッケージ(v。2.4.6-18)がインストールされています。
Apacheをインストールして起動すると、ディレクトリは次のようになります。
# ls -alR /run/httpd/
/run/httpd/:
total 8
drwx--x---. 3 root Apache 120 Sep 30 08:39 .
drwxr-xr-x. 28 root root 1020 Sep 30 08:37 ..
-rw-r--r--. 1 root root 8 Sep 30 08:39 authdigest_shm.2953
drwx------. 2 Apache apache 40 Jul 23 10:48 htcacheclean
-rw-r--r--. 1 root root 5 Sep 30 08:39 httpd.pid
srwx------. 1 Apache root 0 Sep 30 08:39 wsgi.2953.0.1.sock
/run/httpd/htcacheclean:
total 0
drwx------. 2 Apache apache 40 Jul 23 10:48 .
drwx--x---. 3 root Apache 120 Sep 30 08:39 ..
しかし、再起動後:
# ls -l /run/httpd
ls: cannot access /run/httpd: No such file or directory
Apacheを再起動しようとしたときのログは次のとおりです。
/ var/log/httpd/error_log
[Tue Sep 30 09:30:32.310825 2014] [core:notice] [pid 3370] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Tue Sep 30 09:30:32.312072 2014] [suexec:notice] [pid 3370] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Sep 30 09:30:32.330380 2014] [auth_digest:notice] [pid 3370] AH01757: generating secret for digest authentication ...
[Tue Sep 30 09:30:32.330421 2014] [auth_digest:error] [pid 3370] (2)No such file or directory: AH01762: Failed to create shared memory segment on file /run/httpd/authdigest_shm.3370
[Tue Sep 30 09:30:32.330440 2014] [auth_digest:error] [pid 3370] (2)No such file or directory: AH01760: failed to initialize shm - all nonce-count checking, one-time nonces, and MD5-sess algorithm disabled
[Tue Sep 30 09:30:32.330445 2014] [:emerg] [pid 3370] AH00020: Configuration Failed, exiting
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
/ var/log/message
Sep 30 08:56:09 brejetuba2 systemd: Starting The Apache HTTP Server...
Sep 30 08:56:09 brejetuba2 systemd: httpd.service: main process exited, code=exited, status=1/FAILURE
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
Sep 30 08:56:09 brejetuba2 systemd: Failed to start The Apache HTTP Server.
Sep 30 08:56:09 brejetuba2 systemd: Unit httpd.service entered failed state.
/var/log/audit/audit.log
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
type=SERVICE_START msg=audit(1412083740.602:469): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg=' comm="httpd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
ディレクトリを手動で作成すると、Apacheが起動します。
# mkdir /run/httpd
# systemctl restart httpd
# ls -lRa /run/httpd/
/run/httpd/:
total 8
drwxr-xr-x. 2 root root 100 Sep 30 09:36 .
drwxr-xr-x. 28 root root 1020 Sep 30 09:36 ..
-rw-r--r--. 1 root root 8 Sep 30 09:36 authdigest_shm.3452
-rw-r--r--. 1 root root 5 Sep 30 09:36 httpd.pid
srwx------. 1 Apache root 0 Sep 30 09:36 wsgi.3452.0.1.sock
そして、再起動後、それは再びなくなっています。
これがなぜ起こっているのかについての考えはありますか?
問題は、Apacheのインストール時に、グループApacheが作成されなかったことでした。
# systemctl status systemd-tmpfiles-setup.service
systemd-tmpfiles-setup.service - Create Volatile Files and Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-setup.service; static)
Active: failed (Result: exit-code) since Tue 2014-09-30 09:40:30 EDT; 3h 24min ago
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Process: 724 ExecStart=/usr/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev (code=exited, status=1/FAILURE)
Main PID: 724 (code=exited, status=1/FAILURE)
Sep 30 09:40:30 servername systemd-tmpfiles[724]: [/usr/lib/tmpfiles.d/httpd.conf:1] Unknown group 'Apache'.
Sep 30 09:40:30 servername systemd-tmpfiles[724]: [/usr/lib/tmpfiles.d/httpd.conf:2] Unknown user 'Apache'.
Sep 30 09:40:30 servername systemd[1]: systemd-tmpfiles-setup.service: main process exited, code=exited, status=1/FAILURE
Sep 30 09:40:30 servername systemd[1]: Failed to start Create Volatile Files and Directories.
Sep 30 09:40:30 servername systemd[1]: Unit systemd-tmpfiles-setup.service entered failed state.
NIS Apacheユーザーで、NISサーバーが構成されているためです。 Apacheユーザーがいるため、ApacheのインストールではApacheグループは作成されません。しかしApacheグループもNISに存在します!まあ、NISは物事を台無しにしています。
つまり、ypbindを停止し、Apacheをインストールしてから、ypbindを再起動する必要があります(または、手動でApacheグループを/ etc/groupに作成します)。
@ datakid と同じ問題の解決策がありましたが、再起動後にsystemd-tmpfiles-setup.service
は再び死んだ。
私のソリューションでは、最初に/ varディレクトリを別のディスクにマウントしたことを知っておく必要があります。そして問題がありました。ぼくの /etc/fstab
のために /var
は次のようになりました:
/dev/xvdb1 /var ext4 defaults,noatime,_netdev,nofail 0 2
したがって、問題は_netdevでした。これは、ネットワークが必要であるが、/var
ディレクトリ
_netdevの説明は次のとおりです。
ファイルシステムは、ネットワークアクセスが必要なデバイス上に存在します(システムでネットワークが有効になるまで、システムがこれらのファイルシステムをマウントしようとするのを防ぐために使用されます)。
_netdevを削除した後、再起動後もすべてが再び機能していた
私はこれと同じ問題を抱えていましたが、少し異なる解決策がありました。
@ joaoolavo の解決策を使用して、systemctl status systemd-tmpfiles-setup.service
:
[root@server ~]# systemctl status systemd-tmpfiles-setup.service
● systemd-tmpfiles-setup.service - Create Volatile Files and Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: disabled)
Active: inactive (dead)
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
アクティブ:非アクティブ(デッド)であることに注意してください。
Systemd-tmpfiles-setupを再起動すると、/ run /に必要なファイルが作成され、ステータスがActive:active(exited)に変わりましたが、httpd(および私の場合はpostgresql)がロードされていませんでした。
[root@server ~]# systemctl start systemd-tmpfiles-setup.service
[root@server ~]# systemctl status systemd-tmpfiles-setup.service
● systemd-tmpfiles-setup.service - Create Volatile Files and Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: disabled)
Active: active (exited) since Fri 2016-03-18 13:35:36 AEDT; 8s ago
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Process: 2551 ExecStart=/usr/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev (code=exited, status=0/SUCCESS)
Main PID: 2551 (code=exited, status=0/SUCCESS)
Mar 18 13:35:36 server.org systemd[1]: Starting Create Volatile Files and Directories...
Mar 18 13:35:36 server.org systemd[1]: Started Create Volatile Files and Directories.
再起動後も存続しますか?
はい、そうです。実際、期待どおりに再起動が行われるようになりました。作成されたすべてのtmpfiles、httpd、postgresqlも開始されます。
systemd-tmpfiles-setup.service
は、起動後に適切に機能するために、inactive(dead)ではなく、アクティブ状態active(exited)である必要があります。