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