当systemd停止父python脚本时,子进程退出

KillMode参数

contorl-group (默认) # 当前控制组里所有的子进程都会被杀掉

process : #只杀主进程

mixed: #主进程将收到SIGTERM(终止进程)信号,子进程将收到SIGKILL(无条件终止)信号

none:    # 没有进程会被杀掉,只是执行服务的stop命令

 

解决办法

将 KillMode 改成 process 或 none, 然后执行  systemctl daemon-reload.

[Unit]
Description= by chao

[Service]
User=chao
Group=chao
KillMode=none
ExecStart=sh /home/chao/server/bin/start.sh
ExecStop=sh /home/chao/server/bin/stop.sh
PrivateTmp=true
StandardError=journal+console

[Install]

 

下面是我的情况

我有个 python tornado 服务, 启动脚本是 server.py, 这个服务有个重启功能, 接受到重启请求后, 会起一个进程p1把自己kill 掉,然后再把自己启动;目前运行良好。

然后我注册了一个service,实现开机自启动; 但是发现重启功能不好用了,kill 掉之后没有启动自己。

经过不断加日志和测试,发现是systemctl 启动的进程,kill掉之后,子进程也会一起kill 掉;即 contorl-group (默认) # 当前控制组里所有的子进程都会被杀掉

所以我在service 文件里增加了 KillMode 参数,并设置为none。

 https://www.freedesktop.org/software/systemd/man/latest/systemd.kill.html#KillMode=

posted @ 2024-02-21 11:06  温泉镇谢步东  阅读(7)  评论(0编辑  收藏  举报