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