我有一个守护进程,它需要自己的目录来/var/run
存放其 PID 文件,并且授予守护进程的用户写权限。
我发现我可以使用以下命令创建该目录:
# mkdir /var/run/mydaemon
然后我可以将其所有权更改为我希望运行该进程的用户/组:
# chown myuser:myuser /var/run/mydaemon
但每次我重新启动时,这个目录就会消失!如何让这个目录在每次机器启动时都创建?
答案1
有两种方法可以让 systemd 在/var/run
/下创建目录/run
。
通常最简单的方法是声明一个RuntimeDirectory
在您的服务的单元文件中。例如:
RuntimeDirectory=foo
这将创建/var/run/foo
一个系统单元。(注意:不要提供完整路径,只提供下面的路径/var/run
)有关完整文档,请参阅systemd.exec 文档中的相应条目。
对于需要更复杂或不同配置或生命周期保证的运行时目录,请使用tmpfiles.d
并让你的包放置一个文件/usr/lib/tmpfiles.d/mydaemon.conf
:
#Type Path Mode UID GID Age Argument d /run/mydaemon 0755 myuser myuser - -
答案2
我创建了一个可以在启动时创建目录的服务:
vim /etc/systemd/system/mydaemon-helper.service
内容/etc/systemd/system/mydaemon-helper.service
:
[Unit]
Description=MyDaemon Helper Simple Service
After=network.target
[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon
ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon
Restart=on-abort
[Install]
WantedBy=multi-user.target
然后我启动了这个服务:
systemctl start mydaemon-helper
systemctl status mydaemon-helper
输出:
[root@alpha etc]# systemctl status mydaemon-helper.service
● mydaemon-helper.service - MyDaemon Helper Simple Service
Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled)
Active: inactive (dead)
May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service...
May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service.
最后我告诉系统在启动时加载它:
systemctl enable mydaemon-helper