У меня возникают проблемы с пониманием идей, стоящих за 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?
mariadb устанавливается как зависимость от My Service, поэтому при запуске он также запускает mariadb, если он не запущен. Следовательно, остановка mariadb также останавливает My Service.
Но если вы только перезапустите mariadb, моя служба не будет запущена автоматически. Возможно, вам захочется включить My Service: systemctl enable My\ Service.service, который будет настроен для запуска после загрузки. Но если я остановлюсь, он будет остановлен до перезагрузки или ручного перезапуска.
mariadb устанавливается как зависимость от My Service, поэтому при запуске он также запускает mariadb, если он не запущен. Следовательно, остановка mariadb также останавливает My Service.
Но если вы только перезапустите mariadb, моя служба не будет запущена автоматически. Возможно, вам захочется включить My Service: systemctl enable My\ Service.service, который будет настроен для запуска после загрузки. Но если я остановлюсь, он будет остановлен до перезагрузки или ручного перезапуска.