Почему systemd останавливает мой сервис, но не перезапускает его?

У меня есть некоторые проблемы при понимании идей позади systemd. То, что я пытаюсь сделать, настраивают сервис, который должен обычно работать, и это зависит от mariadb для работы правильно. Вот (анонимизированный) .service файл, который я придумал:

[Unit]
Description=My Service
Requires=mariadb.service
After=mariadb.service

[Service]
ExecStart=/usr/bin/python2.7 -u /home/serviceuser/service.py
WorkingDirectory=/home/serviceuser
User=serviceuser

[Install]
WantedBy=multi-user.target

Это работало достаточно хорошо, но я заметил, что иногда сервис будет спонтанно останавливаться. После некоторой отладки я выяснил, что это совпало с mariadb обновлениями системы защиты, устанавливаемыми автоматически человечностью. Тестируя это, я узнал, что остановка mariadb остановит мой сервис сначала (который имеет смысл мне), но запускающийся mariadb назад снова не запустит мой сервис.

Я ожидал бы, что WantedBy подразумевает, что multi-user.target действительно хотел бы, чтобы Мой Сервис работал. Таким образом, systemd должен попытаться гарантировать, что он работает каждый раз, когда нет ничего, что предотвратило бы это. Вещи, которые предотвратили бы его, будут состоять в том, что сервис или одна из его зависимостей были явно остановлены. Как только то условие предотвращения уходит, systemd должен запустить сервис снова.

Какова ошибка в этом обосновании, которое приводит к службе, НЕ запускаемой снова? Как я могу достигнуть поведения, которое я хочу с systemd?

0
задан 28 February 2018 в 02:10

2 ответа

mariadb установлен как зависимость Моего Сервиса, настолько стартового, это также запустит mariadb, не работая. Следовательно, остановка mariadb также останавливает Мой Сервис.

, Но если Вы только перезапускаете mariadb, Мой Сервис не будет запущен автоматически. Вы хотели бы включать Мой Сервис: systemctl enable My\ Service.service, Который настроит его, чтобы быть запущенным после начальной загрузки. Но если я буду правильной остановкой, то это должно сохранить его, остановился до перезагрузки или ручного перезапуска.

0
ответ дан 24 September 2019 в 13:50

Вы можете добавить WantedBy = mariadb.service

[Unit]
Description=My Service
Requires=mariadb.service
After=mariadb.service

[Service]
ExecStart=/usr/bin/python2.7 -u /home/serviceuser/service.py
WorkingDirectory=/home/serviceuser
User=serviceuser

[Install]
WantedBy=multi-user.target
WantedBy=mariadb.service

Это даст systemd знать, что MariaDB также хочет запустить вашу службу (сейчас у вас есть только наоборот).

Другое дело, что вам следует снова включить службу (недостаточно использовать daemon-reload)

systemctl daemon-reload
systemctl enable <your_service>
0
ответ дан 26 March 2020 в 00:53

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

Похожие вопросы: