У меня есть служба systemd под названием sitesdb-job-runner.service
со следующей конфигурацией:
[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 всем процессам и дочерним процессам, но я предполагаю, что здесь происходит что-то еще.
Любые идеи?