Приложение зависит от mongodb. Приложение и mongodb запускаются при загрузке как службы. app.serviceсодержит следующую строку:
After=network.target mongod.service
К сожалению, приложение перестало работать (с ошибкой подключения к базе данных), я думаю, потому что mongodb требуется некоторое время для запуска и готовности к подключению (если я запусту приложение позже, все в порядке).
Похоже, что Type=notify(в [Service]разделе mongod.service) решит проблему, если mongodb отправит соответствующее уведомление systemd. Но я не нашел никакой документации об этом.
Вопрос в том, как автоматически запустить приложение после того, как mongodb будет готов к входящим соединениям.
2 ответа на вопрос
2
Alex Batbold
Я столкнулся с подобной проблемой ... Я хотел запустить Mongo-Connector, как только MongoDB будет готов принять соединение.
Я нашел исправление после того, как немного погуглил. Исправление заключалось в добавлении следующей строки ExecStartPost после строки ExecStart в файле модуля mongodb.
Это успешно протестировано на моем сервере Ubuntu 16.04.
1
WilbaltSlayerOfGargoyles
Для дальнейшего использования я нашел, что это решение работает: https://gist.github.com/jwilm/5842956#gistcomment-2706797 Таким образом, mongodb блокирует доступ к базе данных до того, как systemd запустит следующий сервис. И это не связано со сном.
Если у вас есть сервисы, которые зависят от mongodb, конфигурация будет немного сложнее, потому что сервис mongodb по умолчанию возвращается до того, как база данных подключена. Это может привести к тому, что приложения быстро попытаются и не смогут подключиться к базе данных. Чтобы предотвратить это, добавьте следующее в /etc/mongod.conf:
processManagement: fork: true
Затем создайте /etc/systemd/system/mongod.service.d/mongod.conf (который расширяет существующий /lib/systemd/system/mongod.service) следующим содержимым:
[Service] Type=oneshot RemainAfterExit=yes
Это приводит к тому, что sudo systemctl start mongod запускает сервер в разветвленном процессе и возвращает только ПОСЛЕ того, как база данных готова и готова к соединениям. Таким образом, зависимые сервисы вызываются только после того, как БД активна.
Добро пожаловать в Супер пользователя! Можете ли вы включить соответствующие шаги из решения здесь? :)
bertieb 5 лет назад
1
@bertieb Я добавил контент по ссылке в виде цитаты: thumbsup:
WilbaltSlayerOfGargoyles 5 лет назад
0