`systemctl start;を実行するときにシャットダウン状態が異なるのはなぜですか? systemctl is-active`と`systemctl is-active`は違いますか?

`systemctl start;を実行するときにシャットダウン状態が異なるのはなぜですか? systemctl is-active`と`systemctl is-active`は違いますか?

次のシーケンスは、予想された2番目のコマンドの戻り値の代わりに、最初のコマンドの戻り値を提供します(サブシェルで最初のコマンドを実行したかどうかにかかわらず)。

sudo systemctl start x; sudo systemctl is-active --quiet x; echo $?;
(sudo systemctl start x); sudo systemctl is-active --quiet x; echo $?;

サービスがx破損して起動できません。したがって、サービスが実行されていません。独立して実行される次のコマンドは、正しい戻り値を提供します3

sudo systemctl is-active --quiet x; echo $?;

0それでは、実行時に2番目のコマンド()の戻り値の代わりに最初のコマンド()の戻り値を取得するのはなぜですかcommand; command; echo $?3echo $?

オンライン中GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)。 2行に分けて動作することを知っています。

sudo systemctl start x;
sudo systemctl is-active --quiet x; echo $?;

しかし、PHP関数に入れるので、1行で必要ですshell_exec()。 2回実行すると、shell_exec()コマンドを1行に入力するのと同じ結果が表示されます。

ベストアンサー1

こういう問題に直面した時、私はシャーロック・ホームズの真言に従い、いくら信じられないことでも不可能を取り除いた後、何が残るか考える傾向があります。もちろん、コンピュータには不可能なものはありませんが、当初は無視できるほど不可能なものもあります。 (これは元のタイトルである「command; command; echo $?——戻り値が正しくありません。なぜですか?」よりも意味があります。)

この場合、

sudo systemctl start x; sudo systemctl is-active --quiet x; echo $?;

$?成功を示すゼロで表されますsystemctl is-active。サービス自体systemctl is-activeがアクティブではないという事実は、サービスとコマンドを入力するオペレータとの間に競争があることを強く示唆しています。デフォルトでは、サービスはsystemctl start完了、systemctl is-active実行、およびサービスがアクティブであることを検出するのに十分に開始されます。サービスが失敗し、人の入力がsystemctl is-active見つかりました。非アクティブ状態です。

systemctl startとの間に短い遅延を追加すると、systemctl is-active偽の肯定を防ぐことができます。

おすすめ記事