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

Поведение сервисов systemd при перезагрузке

На Debian 8 я развернул свое приложение, состоящее из нескольких небольших приложений, одно из которых использует HDF5 файл. Проблема с HDF5 файлы это то, что вы иметь чтобы закрыть их. Если, например, вы запрограммируете chrases или ваша программа будет убита, HDF5 файлы повреждаются. В зависимости от размера HDF5 файл, закрытие может занять несколько секунд.

У меня есть инструмент mondas_ctrl который является менеджером моих приложений, их структура здесь не важна. При входе в систему (через ssh) я могу выполнить mondas_ctrl start или mondas_ctrl stop без проблем, особенно стоп команда знает, как бороться с HDF5 файлы (добавляя задержки между ними).

Со старым SysV я мог отложить процесс остановки, изменив уровень выполнения 6 на /etc/inittab с самописным скриптом, который позаботился о файлах HDF5, прежде чем делать init 0. Сейчас systemd по умолчанию, и мне пришлось изменить то, как я думаю о init.d файлы и сервисы. Итак, я написал пользовательскую службу, которая использует моего менеджера для запуска и остановки моих приложений:

Файл: ~/.config/systemd/user/mondas.service

[Unit]
Description=Mondas

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/home/mondas/anaconda/default/bin/mondas_ctrl start
ExecRestart=/home/mondas/anaconda/default/bin/mondas_ctrl restart
ExecStop=/home/mondas/anaconda/default/bin/mondas_ctrl stop
KillMode=none

[Install]
WantedBy=default.target

Сначала у меня были небольшие проблемы с стоп команда. После читая эту ветку Я добавил Type, RemainAfterExit и KillMode параметры. Это очень помогло, и теперь я могу это сделать:

$ systemctl --user start mondas
$ systemctl --user stop mondas
$ systemctl --user start mondas

столько раз, сколько я хочу, стоп команда ничего не убивает, мой mondas_ctrl менеджер останавливает HDF5 app, файл закрыт и не поврежден.

Но когда я перезагружаю систему (либо выполняя reboot или shutdown -r now), KillMode кажется, что флаг игнорируется или вся служба кажется пропущенной, журналы на экране проходят так быстро, что я не могу сказать, выполняется ли моя служба вообще.

Итак, вопрос в том, ведут ли службы "остановки" по-разному, когда вы выполняете systemctl stop и когда вы выполняете reboot/shutdown -r now? Если да, то что мне нужно сделать во время перезагрузки, чтобы у моего приложения было достаточно времени, чтобы закрыть HDF5 файл?

Спасибо

На unix.stackexchange есть отличный ответ, который я рекомендую вам прочитать, чтобы полностью понять, как работает systemd и как решить вашу проблему. Вы можете найти это здесь : https://unix.stackexchange.com/questions/211924/effect-of-reboot-signal-on-systemd-service-state

Надеюсь, это поможет вам!