今天遇到一个问题,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
答案1
{/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 的任何事物来说通常是一个坏主意,那也很酷。
答案2
这些配置文件位于 /usr/lib/tmpfiles.d 和 /etc/tmpfiles.d/ 中。
我需要取消屏蔽并启用 systemd-tmpfiles-setup.service 以便在启动时自动安装 /run :
systemctl unmask systemd-tmpfiles-setup.service systemctl enable systemd-tmpfiles-setup.service
答案3
不是修复 - 而是修复。
在搜索了其他 SE 网站、论坛、新闻组等之后,我想知道这是否可能与本地和远程文件系统的挂载顺序有关(该服务器上挂载了一对 CIFS 共享,每个共享都有子目录绑定)安装在其他地方)。
我将 CIFS 份额推高/etc/fstab
,并将所有绑定安装移动到底部。
然后我重新启动。
现在/run
aka/var/run
正在按预期工作。
我不知道编辑/etc/fstab
很重要——但据我所知,这是唯一的实质性改变。
答案4
/var/run 被认为是一个易失性临时目录。
tmpfiles.d
用于配置易失性文件和临时文件的创建、删除和清理,其中包括以下目录/var/run
中的文件会覆盖和/etc/tmpfiles.d
中同名的文件。中的文件是为本地管理员保留的,他们可以使用此逻辑来覆盖供应商软件包安装的配置文件。 来源:/usr/lib/tmpfiles.d
/run/tmpfiles.d
/etc/tmpfiles.d
https://www.systutorials.com/docs/linux/man/5-tmpfiles.d/
您可以cat
使用现有配置/usr/lib/tmpfiles.d
和ls -l /var/run
权限来帮助确定适当的权限。
创建一个新文件[name]
或httpd
在/etc/tmpfiles.d
;示例基于/usr/lib/tmpfiles.d/screen
httpd
# httpd needs directory in /run
d /run/httpd 0775 root apache
通用的
# [name] needs directory in /run
d /run/[name] [perms] [user] [group]