我将 sphinx pid 保存在 /var/run/sphinx/searchd.pid 中,但每次我硬重启时,目录 /var/run/sphinx 都会消失,并且 sphinx 无法启动。有没有办法让该目录保留下来或自动创建?人们通常如何处理这种情况?我使用 Ubuntu Hardy
答案1
该目录在设计上是临时的。如果其内容在启动过程中残留,则可能会发生各种不良影响,因为各种控制脚本都会查看该目录以查看它们应该向哪些进程发出信号。在最近的系统中,这种临时性质是通过挂载为 来强制执行的/var/run
,tmpfs
而较旧的系统则会在启动时删除目录中的所有内容。
因此,您需要配置Sphinx或其启动脚本来创建该目录,或者直接写入PID文件/var/run
。
答案2
你至少有两次机会:
- 更改你的初始化脚本来执行
mkdir -p /var/run/sphinx/
或者
- 放
pid_file = /var/run/sphinx-searchd.pid
在/etc/sphinx.conf
我赞成第二种。
答案3
现在有一种集中机制来创建这些临时文件和目录。希望使用此方法的服务可以在其自己的启动脚本中删除 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
在重启时创建目录。
查看完整文档临时文件
答案4
如果使用systemd
,则有一个明确用于此的配置项。
http://manpages.ubuntu.com/manpages/xenial/en/man5/systemd.exec.5.html
[Service]
RuntimeDirectory=sphinx
如果设置,将在 下创建一个或多个指定名称的目录,并将由和/run
中指定的用户和组拥有。这意味着该服务不需要写入 /var/run 的权限。User=
Group=
从启动脚本启动的脚本和程序会获得一个变量 $RUNTIME_DIRECTORY,该变量指向 RuntimeDirectory 位置 - 该位置可能并不总是在 /var/run。 https://www.freedesktop.org/software/systemd/man/systemd.exec.html