仅根据某些信号崩溃时如何使用 systemd 重启服务

How to restart a service using sytemd when it crashed based on only certain signals

基本上,我只想使用 systemd

实现与 init.d 的 monitor 相同的功能

我有一个作为守护进程运行的服务。如果该服务由于某种原因崩溃,我想使用 systemd.

重新启动它

我在翻其他相关问答的时候,发现我们可以在那个服务的单元里面加上下面的内容。

Restart=always
RestartSec=0

但是只有当我们发生崩溃时才会重启吗?还是就算杀了?

是否可以根据 SIGTERM、SIGINT 或 SIGHUP 等特定信号重新启动它?

重启就是重启。很简单。

如果您不想重新启动,可以选择 systemctl stop foo.service

根据标准文档,服务重启的条件发生在退出、终止和超时时。所以,你的问题得到了回答。 crash的时候退出,kill掉的时候,没错,就是重启。

Restart= Configures whether the service shall be restarted when the service process exits, is killed, or a timeout is reached....

查看此处了解更多信息和详细信息 (https://www.freedesktop.org/software/systemd/man/systemd.service.html)

关于发送信号,该过程遵循其设计遵循的信号处理程序。

这与 systemd 控制器和效果无关。只要考虑一下,当您发送信号时,实际上是将其发送给进程本身。它根本没有到达 systemd 进程。