systemdサービスが開始される前にbashスクリプトが完了したことを確認するには?

systemdサービスが開始される前にbashスクリプトが完了したことを確認するには?

Bashスクリプトが欲しい十分systemd私が知る限り、特定のサービスの前には動作します(起動するだけではありません)。ソリューションがサービスの前に完了することもあります。私自身サービスが終了しました。

ウェブ検索で始める方法に関する質問が出てくるかもしれません。私が理解しているように、Before=オプションはデバイスが起動するのを待つことです。そのため、読んだときに1つman systemd.serviceのオプションしか表示されませんType=forking。 ::

親プロセスが終了すると、サービス管理者はそのデバイスが起動したと見なします。

スクリプトでは、どのプロセスもフォークしませんでしたが。私はここにいますか?これは、Before=サービスが開始される前にスクリプトが完了することを保証します(エラーなどを除く)。

たとえば、他の種類はType=exec次のとおりです。

「そして、サービスプロセスのfork()とexecve()の両方が成功するまで、execは続行されません。」

proceedここで何を意味するのかわからないので、それを読むとsystemdが成功したかman execveどうかを理解できません。execve

execve() は、成功時に返さずに、呼び出しプロセスのテキスト、初期化されたデータ、初期化されていないデータ (bss)、およびスタックを新しいローダーの内容に従って上書きします。

私が知る限り、他のタイプ(notify、dbus)には、manプロセスの開始時に特別な機能が必要です。

ベストアンサー1

私はあなたがかなりうまくtype=oneshot使えると思いますRemainAfterExit=true文書

しかし、oneshotは単に動作します。基本プロセスが終了した後、サービス管理者はデバイスが起動したと見なします。。次に、後続のデバイスを起動します。RemainAfterExit=これらのサービスに特に便利です。両方が指定されていない場合、デフォルトType=oneshotは暗黙的です。サービスなしでこのオプションを使用すると、サービスは「アクティブ」デバイスの状態に移行せず、「アクティブ化」から「非アクティブ化」または「非アクティブ」に直接切り替えられます。構成が連続実行プロセスではないためです。具体的には、このタイプのサービスが実行された後(まだ設定されていない場合)の後に開始されたように見えず、むしろ死んでいるように見えます。Type=ExecStart=RemainAfterExit=RemainAfterExit=

まだ明確ではないかもしれません。主な工程はい、しかし説明を見ると、次のことがわかりますExecStart=

設定しないと、Type=forkingこのコマンドラインから起動されたプロセスはデーモンのデフォルトプロセスと見なされます。


編集する

これは複数のオプションを許可するType=oneshot唯一のタイプです。ExecStart=表示される順序で順次実行され、各プロセスは実行時に独自のマスタープロセスになります。

マニュアルをもう一度確認してください。

実行開始=

このサービスの起動時に実行するコマンドです。値は、以下の「コマンドライン」セクションで説明されている規則に従ってゼロ個以上のコマンドラインに分割されます。

Type=が1回限りでない限り、コマンドを提供する必要があります。 Type=oneshot を使用すると、ゼロ個以上のコマンドを指定できます。同じディレクティブに複数のコマンドラインを指定してコマンドを指定することも、同じ効果を得るためにディレクティブを複数回指定することもできます。このオプションを空の文字列として指定すると、リセットするコマンドのリストがリセットされ、このオプションの以前の指定は適用されません。 ExecStart =が指定されていない場合、サービスはRemainAfterExit = yesと少なくとも1つのExecStop =行を設定する必要があります。 (ExecStart =およびExecStop =が見つからないサービスは無効です。)

複数のコマンドを指定した場合は、ユニットファイルに表示される順番で呼び出されます。コマンドの1つが失敗した場合(「-」プレフィックスが付いていない)、他の行は実行されず、デバイスは失敗したと見なされます。

おすすめ記事