systemd 通过 scl 运行进程,我的进程没有收到 SIGTERM

systemd 通过 scl 运行进程,我的进程没有收到 SIGTERM

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,但我猜测这里还发生了其他事情。

有任何想法吗?

相关内容