web-dev-qa-db-ja.com

Systemd:mongodb後の自動開始サービス

ubuntu16.04.1、systemd

アプリケーションはmongodbに依存しています。アプリケーションとmongodbは両方とも、起動時にサービスとして起動します。 app.serviceは次の行を含みます:

After=network.target mongod.service

残念ながら、mongodbは起動して接続の準備が整うまで時間がかかるため(アプリケーションを後で起動する場合はすべて問題ありません)、アプリケーションは(データベースへの接続エラーで)失敗します。

Mongodbがsystemdに適切な通知を送信すると、Type=notify[Service]mongod.serviceセクション)が問題を解決するようです。しかし、それに関するドキュメントは見つかりませんでした。

問題は、mongodbが着信接続の準備ができた後、アプリケーションを自動起動する方法です。

1

将来の参考のために、このソリューションが機能することがわかりました: 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はフォークされたプロセスでサーバーを起動し、データベースが起動して接続準備が整った後にのみ返されます。このように、依存サービスは、dbが稼働した後にのみ呼び出されます。

この質問への答えは、すでにserverfaultにあると思います。要するに:Requiresの代わりにAfterを使用すべきでしょう。 Requiresは、サービスが適切に機能するために他のサービスを必要とすることを意味します。「あとで開始する」べきではありません。

https://serverfault.com/questions/812584/in-systemd-whats-the-difference-between-after-and-requires

0
Piohen