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

1 ответ1

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .