Назад | Перейти на главную страницу

Продолжительный цикл скрипта обновления bash. Как лучше справиться с прерыванием?

У меня есть сценарий 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 будет очень раздражена невозможностью остановить службу, но она должна продолжать работать.