systemctl After не работает

1068
Dan S

У меня есть пользовательский сервис, который мне нужно запустить после того, как MySQL появится в сети. Я пытаюсь использовать systemd / systemctl для запуска службы при загрузке. Я установил After=network.target mysqld.serviceв моем пользовательском файле конфигурации. Проблема, по-видимому, заключается в том, что systemctl полагает, что mysql завершил запуск, и, следовательно, приступает к запуску моей пользовательской службы, но пользовательская служба не может подключиться к базе данных после просмотра журнала. Проверка меток времени в журнале mysql показывает, что мой пользовательский сервис запускается до того, как mysql готов к запуску. Я просматривал документацию по systemctl, и не было никаких «ждать до начала тайм-аута» или «ждать, пока сокет прослушивает соединения». Как я могу убедиться, что mysql готов перед запуском моей пользовательской службы?

0
добавить задержку к началу? soandos 12 лет назад 0
Куда? Файлы конфигурации systemctl не спят Dan S 12 лет назад 0
Очевидно, в модульном файле mysql есть ошибка, из-за которой systemd считает, что он запущен раньше, чем он есть на самом деле. [Вы должны подать его.] (Https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora&version=rawhide&component=mysql) Чтобы использовать обходной путь soandos, вы можете добавить что-то вроде `ExecStartPre = / bin / sleep 10` , Patches 12 лет назад 0

1 ответ на вопрос

0
Matthias Šubik

В файлах systemd.service есть опция, которая явно проверяет наличие сокета.

В документации по systemd Леннарт Петтеринг очень подробно описывает, что большинству сервисов не нужен фактический запуск, а просто сокет для привязки.

Systemd может создать эти сокеты и запускает mysql при первом доступе! Это одна из главных причин создания systemd.

http://0pointer.de/blog/projects/socket-activation.html