sitesdb-job-runner.service
我有一个名为以下配置的systemd 服务:
[Unit]
Description=SitesDB Background Job Runner
After=network.target mariadb.service
[Service]
Type=simple
Restart=always
User=sitesdb
ExecStart=/bin/scl enable rh-git29 rh-php71 "/var/www/sitesdb/current/bin/console --env=prod jms-job-queue:run -v"
[Install]
WantedBy=multi-user.target
当我运行 时systemctl stop sitesdb-job-runner
,SIGTERM 不会发送到我的进程。我知道这一点是因为进程在收到 SIGTERM 时会记录日志,以便可以正常关闭。
scl
经过一番调查,我怀疑这与我用来实际执行脚本的包装器有关。当我/bin/scl enable rh-git29 rh-php71 "/var/www/sitesdb/current/bin/console --env=prod jms-job-queue:run -v"
直接运行时,会产生以下三个进程:
(1) /bin/scl enable rh-git29 rh-php71 /var/www/sitesdb/current/bin/console --env=prod jms-job-queue:run
(2) /bin/bash /var/tmp/sclSdT0wu
(3) php /var/www/sitesdb/current/bin/console --env=prod jms-job-queue:run -v
如果我手动定位第三个进程的 PID(我的实际命令)并向其发送 SIGTERM,它会按预期工作。但是当我向父进程发送 SIGTERM 时,我的进程没有收到 SIGTERM。
我对 systemd 默认行为的理解是它会向所有进程和子进程发送 SIGTERM,但我猜测这里还发生了其他事情。
有任何想法吗?