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

Другие вопросы по тегам