systemd 无 ExecStop 停止服务原理
systemd 代替 init,可以帮助我们不用写复杂的脚本来启停服务,大多数情况下配置 ExecStart 就能完成基本任务。很多人会对关闭表示疑问:很多 unit 文件中只有 ExecStart 命令,没有ExecStop、ExecReload命令也能实现关闭和重启,这是为什么?
例如,关闭防火墙服务执行systemctl stop firewalld
。
执行后,如果没有配置ExecStop,Systemd 默认将发送SIGTERM
信号到主进程,并等待TimeoutStopSec配置的时间后查看进程是否已终止,如果没配置这个时间默认是90s。
90s以后,systemd 会检查进程有没有停止成功,如果还没停止,则 systemd 会发送SIGKILL
信号来强杀进程完成该任务。如果主进程 fork 了其他子进程,则 systemd 也会一并停止它们,因为它们都位于同一个 cgroup 中。
ExecStop=
除非您有其他关闭服务的方法,否则您无需指示。