LDAPデータベースをホストするコンピュータがあり、他のコンピュータのサービスはそのデータベースのユーザーとして実行されます。ユーザーアカウントがローカルに存在しないため、LDAPデータベースをホストしているコンピュータの前にそのコンピュータを起動すると、サービスは開始されません。
CentOS 7を実行しているコンピュータを除くすべてのコンピュータはUbuntu 14.04を実行します。一部のサービスを開始する前に、LDAPデータベースが利用可能になるのを待つためにupstartとsystemdを使用できますか?
編集する:Upstartの事前起動スクリプトを使用してLDAPが利用可能になるまでループを試みましたが、機能しません。 Upstartレシピで、「setuid」と「setgid」で指定されたユーザーとグループで実行される事前起動スクリプトを見つけました。したがって、他のコンピュータで LDAP サービスが実行されるまでユーザーとグループが存在しないため、事前起動スクリプトは実行されません。
また、「respawn」を指定してみましたが、この場合は役に立ちませんでした。 Upstartレシピで私が理解したように、respawnはデフォルトのスクリプトまたは実行可能ファイルが失敗した場合にのみ適用されます。したがって、スクリプトが実行される前にサービスが失敗するため、サービスは再起動されません。
答え1
私はあなたがそれを使用していると仮定しているので、必要に応じてサービスファイルを変更することをお勧めしますsystemd
。systemd
このRestart=
フラグは、サービスが実行されていない理由によってサービスが実行されていないときに開始する必要があるかどうかを示します。
次のことができます。Restart=on-failure
たとえば、次のようになります。これにより、サービスは成功するまで継続して開始しようとします。
ExecStart=
必要に応じて、bashコマンドを使用または実行して、サービスが開始される前にExecStartPre=
ldapを使用できることを確認できます。
systemd
サービスファイルの詳細については、こちらをご覧ください。https://www.freedesktop.org/software/systemd/man/systemd.service.html
編集:Upstart(Ubuntu)の場合、フラグはフラグとrespawn
似ている必要があります。systemd
Restart=on-failure
https://wiki.ubuntu.com/SystemdForUpstartUsers