什么可能会导致 /var/run 中的目录消失/启动时不会创建? (CentOS 7.3)

什么可能会导致 /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

答案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,并将所有绑定安装移动到底部。

然后我重新启动。

现在/runaka/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.dls -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]

相关内容