硬重启后 /var/run 中的目录被删除

25 ubuntu pid

我将我的 sphinx pid 保存在 /var/run/sphinx/searchd.pid 但每次我硬重启目录 /var/run/sphinx 消失并且 sphinx 无法启动。有没有办法使该目录保持不变或自动创建?人们通常如何处理这种情况?我使用 Ubuntu Hardy

Phi*_*ler 23

该目录在设计上是短暂的。如果它的内容停留在靴子上,则可能会出现各种丑陋的效果,因为各种控制脚本会在那里查看它们应该发出信号的进程。在最近的系统上,这种临时性质是通过挂载/var/runas来强制执行的tmpfs,而较旧的系统只是在启动时删除目录中的所有内容。

因此,您需要配置 Sphinx 或其启动脚本来创建该目录,或者直接写入 PID 文件/var/run

  • +1 用于/var/run 的描述。但请注意,他不希望 PID 文件在重启后保持不变;只是 sphinx 目录。 (4认同)

drA*_*erT 15

你至少有两次机会:

  • 更改您的初始化脚本以执行 mkdir -p /var/run/sphinx/

或者

  • 设置pid_file = /var/run/sphinx-searchd.pid/etc/sphinx.conf

我是第二个。

  • 当然,这意味着启动脚本必须以 root 身份运行才能直接写入或在 /var/run 中创建目录。这很烦人... (2认同)

Aak*_*hal 10

现在有一个集中的机制来创建诸如此类的临时文件和目录。希望使用此方法的服务可以在其自己的启动脚本中删除 mkdir 命令,而是将 .conf 文件放在 /etc/tmpfiles.d、/run/tmpfiles.d 或 /usr/lib/tmpfiles.d 中,对于 Ubuntu服务似乎更喜欢最后一个选项。为您的情况创建一个文件/usr/lib/tmpfiles.d/sphinx.conf
该文件的内容将是:
d /var/run/sphinx 0755 root root

这里d代表目录,旁边是路径、权限、所有者和组。
这将/var/run/sphnix在重新启动时创建目录。

查看完整的文档tmpfiles.d


小智 6

如果使用systemd,则有一个明确用于此的配置项。

http://manpages.ubuntu.com/manpages/xenial/en/man5/systemd.exec.5.html

[Service]
RuntimeDirectory=sphinx
Run Code Online (Sandbox Code Playgroud)

如果设置,将在下面创建一个或多个指定名称的目录,并由和/run中指定的用户和组拥有。这意味着该服务不需要写入 /var/run 的权限。User=Group=

从启动脚本启动的脚本和程序会获取一个指向 RuntimeDirectory 位置的变量 $RUNTIME_DIRECTORY - 该位置可能并不总是位于 /var/run 中。 https://www.freedesktop.org/software/systemd/man/systemd.exec.html