別のユニットが正常に完了した後、別のユニットの実行を指示します。

別のユニットが正常に完了した後、別のユニットの実行を指示します。

cloud-config を使用して DCOS クラスターをインストールして構成します。

通常、agentinstall.serviceサービスの完了には5分かかります。

systemdに実行を指示することは可能ですか?agentconfigure.service その後 agentinstall.service十分?

#cloudconfig
コア:
  単位:
    - 名前: "agentinstall.service"
      コマンド:「スタート」
      内容:|
        [単位]
        説明=プロキシ設定
        以降 = network.target

        [提供する]
        タイプ=シンプル
        ユーザー=ルート
        作業ディレクトリ=/tmp
        ExecStartPre=/bin/curl -o /tmp/dcos_install.sh http://bootstapnode-0.dev.myztro.internal:9090/dcos_install.sh
        ExecStartPre=/bin/chmod 755 dcos_install.sh
        ExecStart=/bin/bash dcos_install.sh スレーブ

        [インストールする]
        WantedBy =マルチユーザー。ターゲット
    - 名前: "agentconfigure.service"
      コマンド:「スタート」
      内容:|
        [単位]
        説明 = プロキシの設定
        以降=agentinstall.service

        [提供する]
        タイプ=シンプル
        ユーザー=ルート
        作業ディレクトリ=/opt/mesosphere/etc/
        ExecStartPre=/bin/echo "MESOS_ATTRIBUTES=cluster:uploader" >> /opt/mesosphere/etc/mesos-slave-common
        ExecStartPre=/bin/rm -f /var/lib/mesos/slave/meta/slaves/latest
        ExecStart=/usr/bin/systemctl dcos-mesos-slave 再起動

        [インストールする]
        WantedBy =マルチユーザー。ターゲット

ありがとうございます。

答え1

systemdを使用してこれを行う方法は、デバイスの起動と実行にのみ興味があると思ったからです。たとえば、After=指定されたデバイスが起動した後にのみ1つのデバイスを強制的に起動したり、2つのデバイスを並列に起動したりできます。

Wants=目的のデバイスではなく、指定されたデバイスが並列に起動するようにします(必要なデバイスがまだ起動/アクティブ化されていない場合)。

Requires=After=onと一緒に使用すると、agentconfigure.service有効になった後( "busy")起動しますagentconfigure.service。これで最大5分間待機ループがあり、agentinstall.service実際の作業を続行する前にagentconfigure.service定期的に完了するかどうかを確認できます。agentinstall.service私が見る唯一のオプション。

編集:私が考えるもう一つのオプションは、インストールが成功したら実行してからagentinstall.service終了agentconfigure.serviceすることです。

答え2

/bin/bash dcos_install.sh slaveコマンドの後に実行しますか?

そのコマンドを使用してサービスをType=oneshot


echo@JdeBPは、あなたのコマンドがシェルリダイレクトを使用しようとしていることを指摘するように依頼しました。これはうまくいきません。

答え3

systemd 249、2021年7月リリース、これを正確に実行する新しい依存関係タイプのサポートが追加されました。これOnSuccessにより、ユニットが完了したときに実行するユニットを指定できます。

したがって、ホストのシステムが249以上の場合は、次のものがagentinstall.service必要です。

[Unit]
Description=agent_setup
After=network.target
OnSuccess=agentconfigure.service

これでこれが可能になり、タスクがsystemctl start agentinstall.service完了するたびにagentconfigure.service自動的に開始されます。


OnFailure=完了のために - 同じ操作を実行しますが、デバイスが失敗したときにのみトリガーされる依存関係もあります。 2013年にリリースされたsystemd v201に導入されました。

関連情報