Фон
Мене попросили створити systemd
сценарій для нової послуги, foo_daemon
яка іноді потрапляє у "поганий стан", і не загине SIGTERM
(можливо, через користувальницький обробник сигналу). Це проблематично для розробників, оскільки їм доручено запустити / зупинити / перезапустити службу через:
systemctl start foo_daemon.service
systemctl stop foo_daemon.service
systemctl restart foo_daemon.service
Проблема
Іноді, через foo_daemon
потрапляння в поганий стан, нам доводиться насильно вбивати його через:
systemctl kill -s KILL foo_daemon.service
Питання
Як я можу налаштувати свій systemd
скрипт, foo_daemon
щоб кожен раз, коли користувач намагався зупинити / перезапустити послугу systemd
:
- Спроба граціозного відключення програми
foo_daemon
viaSIGTERM
. - Дайте до 2 секунд, щоб завершити відключення / припинення
foo_daemon
. - Спроба примусового відключення з
foo_daemon
допомогою ,SIGKILL
якщо процес все ще живий (так що ми не маємо ризик PID переробляються іsystemd
питанняSIGKILL
від неправильного PID). Пристрій, на якому ми швидко тестуємо нерести / вилки, виконує численні процеси, тому виникає рідкісна, але дуже реальна стурбованість переробкою PID, що викликає проблеми. - Якщо на практиці я просто параноїзуюсь щодо переробки PID, я все в порядку, коли сценарій видається
SIGKILL
проти PID процесу, не переймаючись вбивством переробленого PID.