Cassandraが正常に起動し、クラスターが起動して準備ができていることに依存するサービスがあります。
依存関係の順序が満たされていることを確認するために、次のユニットファイルがあります
[Unit]
Requires=cassandra.service
After=cassandra.service
[Service]
Environment=Java_HOME=/usr/Java/jre
[email protected]@/webapps/bringup-app/bin/bringup
TimeoutStartSec=0
ExecStop=
[email protected]@/logs/bringup.pid
Restart=always
[Install]
WantedBy=multi-user.target
Bringup-appプロセスが起動を試みる前に30秒間待機するようにするにはどうすればよいですか?現在、Cassandraの後に起動していますが、Cassandraクラスターがまだ起動していないため、bringup-appからCassandraへの接続試行が失敗することに気付きました。
したがって、遅延を追加します。ユニットファイル経由で可能ですか?
ExecStart の前に sleep コマンドを実行できます ExecStartPre で:
[Service]
ExecStartPre=/bin/sleep 30
.timer
systemdユニットファイルを作成して、.service
ユニットファイルの実行を制御できます。
たとえば、起動後1分間待ってからfoo.service
を開始するには、同じディレクトリにfoo.timer
ファイルを作成し、その内容を次のようにします。
[Timer]
OnBootSec=1min
このすべてが機能するためには、サービスが無効になっている(したがって、起動時に開始されない)タイマーが有効になっていることが重要です(これはユーザー tride のおかげです):
systemctl disable foo.service
systemctl enable foo.timer
ここには、さらに多くのオプションと必要なすべての情報があります: https://wiki.archlinux.org/index.php/Systemd/Timers
Bringupサービスを編集する代わりに、依存するサービスに開始後の遅延を追加します。 cassandra.service
を次のように編集します:
ExecStartPost=/bin/sleep 30
このように、追加のスリープは、それに依存するサービスの開始の再起動を遅くするべきではありません(独自の起動を遅くしますが、それが望ましいでしょうか?)。
スーパーユーザーに関するこの答えは、より良い答えだと思います。から https://superuser.com/a/573761/67952
「しかし、BeforeとAfterを使用せずに方法を要求したので、以下を使用できます。
Type=idle
man systemd.service
が説明するように
アイドルの動作は単純に非常に似ています。ただし、すべてのアクティブなジョブがディスパッチされるまで、サービスプログラムの実際の実行は遅延します。これは、シェルサービスの出力とコンソールのステータス出力のインターリーブを回避するために使用できます。このタイプはコンソール出力の改善にのみ有用であり、一般的なユニット注文ツールとしては有用ではなく、このサービスタイプの効果は5秒のタイムアウトの影響を受けることに注意してください。 」
これを行うsystemd
の方法は、ソケットを開く、または notification (または終了する親スクリプト)を送信するなど、何らかの方法でセットアップされたときにプロセスに「トークバック」させることです。これはもちろん、特にサードパーティのものでは必ずしも簡単ではありません:|
インラインで何かできるかもしれません
ExecStart=/bin/bash -c '/bin/start_cassandra &; do_bash_loop_waiting_for_it_to_come_up_here'
または同じことを行うスクリプト。または、do_bash_loop_waiting_for_it_to_come_up_here
をExecStartPostに入れます
または、ヘルパーサービスが作成されるのを待つヘルパー.serviceを作成して、ヘルパーサービスがcassandraに依存し、それが起動するのを待つと、他のプロセスがヘルパーサービスに依存するようになります。
(同様に、デフォルトの90から TimeoutStartSec を増やしたい場合があります)