我还没有找到一种方法让 systemd 识别出在我开始我的进程之前需要运行一些必需的非 systemd 进程。例如,在 Upstart 中我可以这样做:
if pgrep -f bin/postgres
我发现的最接近的是“基于路径的激活”,它可以让我寻找锁定文件,但这很笨重并且不能保证,因为有时锁定文件会被孤立。
我不想重写所有不使用 systemd 的进程,以便它们现在使用它 - 我只想以这种方式启动一个特定的进程。
是没有这个选项,还是我没找到?
答案1
我能想到的最好的选择是炸鱼薯条德里克在评论中提到:ExecStartPre
:
# ...
[Service]
ExecStartPre=/usr/bin/pgrep -f bin/postgres
# ...
这谨遵以下指示:
ExecStartPre= 不得用于启动长时间运行的进程
...因为pgrep
完成后退出。它还通过在列出的进程存在时允许服务启动并在列出的进程不存在时阻止服务启动来实现所需的功能。
如果您在必要的进程不存在时尝试手动启动服务,您将得到:
demo.service 的作业失败,因为控制进程退出并出现错误代码。有关详细信息,请参阅“systemctl status demo.service”和“journalctl -xe”。