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

У меня возникают проблемы с пониманием идей, стоящих за 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, которое автоматически устанавливается ubuntu. Испытывая это, я обнаружил, что остановка mariadb сначала остановит мое обслуживание (что имеет смысл для меня), но запуск mariadb снова не запустится.

Я ожидал бы, что WantedBy означает, user.target действительно хотел бы запустить My Service. Поэтому systemd должен стремиться к тому, чтобы он выполнялся всякий раз, когда не было ничего, что могло бы помешать этому. Вещи, которые могли бы предотвратить это, заключались бы в том, что служба или одна из ее зависимостей была явно остановлена. Как только это предотвращающее условие уйдет, systemd должен снова запустить службу.

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

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

2 ответа

mariadb устанавливается как зависимость от My Service, поэтому при запуске он также запускает mariadb, если он не запущен. Следовательно, остановка mariadb также останавливает My Service.

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

0
ответ дан 17 July 2018 в 19:56

mariadb устанавливается как зависимость от My Service, поэтому при запуске он также запускает mariadb, если он не запущен. Следовательно, остановка mariadb также останавливает My Service.

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

0
ответ дан 23 July 2018 в 20:40
  • 1
    Спасибо, но это только повторяет то, что я уже узнал. На самом деле он не отвечает ни на один из двух вопросов. – Medo42 28 February 2018 в 02:55

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

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