我正在运行 ubuntu 16.04。
假设我希望系统运行“mkdir /var/log/服务名称“在启动服务之前(由于 tmpfs 中有 /var/log,所以需要)。
之前,我使用 upstart 编辑了配置文件/etc/init.d/ 启动服务名称向其中添加命令。
现在该服务正在通过 systemd 运行,它的初始化配置文件是 /lib/systemd/system/服务名称是不是A配置文件,即如果被编辑它将在包更新时被替换。
解决该问题的推荐方法是什么?
答案1
我发现了一个但不太喜欢的解决方案:
- 将包的服务文件复制到新名称:
cp /lib/systemd/system/$servicename.service /lib/systemd/system/$servicename-my.service
。 - 编辑新的服务文件:
ExecStartPre=...
在旁边添加ExecStart
:sed -i "s_^ExecStart=_ExecStartPre=/bin/mkdir -p /var/log/$servicename\nExecStart=_" /lib/systemd/system/$servicename-my.service
- 禁用旧服务,启用新服务:
systemctl stop $servicename; systemctl disable $servicename; systemctl enable $servicename-my; systemctl start $servicename-my
。
我不喜欢这个解决方案的主要原因是需要一个外部文件/etc
,而相应的工具会认为这个文件是“垃圾”。
此外,尚未经过广泛的测试。
编辑1:
更正:根据文档,应该可以将修改后的服务文件放入而/etc/systemd/system/
无需重命名。稍后将进行测试。
另一个间接相关的问题:PermissionsStartOnly=yes
可能无法正常工作。