Я использую Супервизор для управления процессами. Действительно ли возможно иметь Супервизор, выполняет команду, когда это получает SIGTERM (или другой сигнал)?
Нет, невозможно настроить поведение супервайзера при получении сигнала(ов), не изменив исходный код и не добавив эту возможность.
Единственное, что можно сделать, это указать сигнал завершения процесса, когда он будет остановлен, с помощью опции "стопсигнал".
.Вот один из подходов к достижению желаемого:
(1) Создайте новый сценарий оболочки, назовем его woker.sh
:
#!/bin/bash
function do_something {
# do something
exit 0
}
trap do_something SIGTERM
while true; do
sleep 1
done
(2 ) Добавьте указанный выше файл сценария в файл конфигурации Supervisor supervisord.conf
в качестве нового раздела программы:
[program:worker]
command=/usr/local/bin/worker.sh
stderr_logfile = /var/log/supervisord/worker-stderr.log
stdout_logfile = /var/log/supervisord/worker-stdout.log
Вы можете найти реальный пример здесь .