У меня есть сценарий bash, который загружает некоторые данные, запускает процесс для их импорта, а затем ненадолго спит (около часа). Он отлично работает как служба systemd (в Ubuntu 16.04 и 18.04)
Но Я боюсь, что прерывание процесса импорта может оставить базу данных в несогласованном состоянии, поэтому я хочу предотвратить его прерывание. т.е. systemctl stop mything
должен блокироваться до завершения процесса импорта. Остальные этапы процесса можно по желанию прервать.
Есть ли простой способ в сценарии bash запустить команду и сказать «не распространять SIGKILL
сигнал к этой команде "? (nohup
блоки SIGHUP
). Для других похожих скриптов я использовал bash's trap
чтобы "поймать" сигнал, который останавливает bash, убивающий процесс, но затем sleep
не убит, поэтому мне пришлось запустить сон в фоновом режиме и wait
на нем (а затем убить сон в обработчике сигнала). Что кажется слишком сложным.
Есть ли способ лучше? Есть ли nosigkill
команда (как nohup
) который заблокирует sigkill только для этой команды?
Вы можете установить FinalKillSignal=
к другому сигналу, отличному от SIGKILL, например SIGCONT.
Обратите внимание, что systemd будет очень раздражена невозможностью остановить службу, но она должна продолжать работать.