什麼可能導致 /var/run 中的目錄在啟動時消失/不被創建?(CentOS 7.3)
今天遇到一個問題,Apache 因為
/var/run/httpd
失去而無法載入。經過大量尋找錯誤的原因後,我得到了([Tue Jul 25 00:06:31.574386 2017] [auth_digest:error] [pid 6179] (2)No such file or directory: AH01760: failed to initialize shm - all nonce-count checking, one-time nonces, and MD5-sess algorithm disabled
)。然後我看到 MariaDB 缺少它的
/var/run/mysql
目錄,而 PostgreSQL缺少它的目錄。什麼會導致系統啟動時無法製作/在重新啟動之間保存?
我不希望按照這個問題的建議修改初始化腳本。
編輯:
ls -dl /var/run
&的輸出ls -dl /run
lrwxrwxrwx. 1 root root 6 Dec 15 2015 /var/run -> ../run drwxr-xr-x 25 root root 800 Jul 26 03:40 /run
{/var,}/run 在啟動時被 systemd 蒸發。如此低的價值,這是一個美妙且完全出乎意料的驚喜。
如果要確保引導後目錄存在,則必須使用 systemd 的 tmpfiles 部分掛鉤。
/usr/lib/tmpfiles.d/httpd.conf :::::::::::::: d /run/httpd 710 root apache d /run/httpd/htcacheclean 700 apache apache /usr/lib/tmpfiles.d/mariadb.conf :::::::::::::: d /var/run/mariadb 0755 mysql mysql -
而且,如果您的 tmpfiles 條目失去,我敢打賭您手動滾動您自己的包(並為every.single.release 調整、測試和推廣)。只要我們同意,對於任何具有規模或 SLA 的東西來說,這通常是一個壞主意,但那很酷。
這些配置文件位於 /usr/lib/tmpfiles.d 和 /etc/tmpfiles.d/。
我需要取消屏蔽並啟用 systemd-tmpfiles-setup.service 以便在啟動時自動設置 /run:
systemctl unmask systemd-tmpfiles-setup.service systemctl enable systemd-tmpfiles-setup.service