実行中のプロセスのステータス ビットを確認するにはどうすればよいですか?

実行中のプロセスのステータス ビットを確認するにはどうすればよいですか?

さて、私のジレンマは、Dell PowerEdge T710 サーバーでヘッドレス Ubuntu サーバー 18.04.3 LTS を実行しており、手動で使用し続けることなく Apache PHP Mod バージョンを簡単に変更できるように bash スクリプトを作成しているところです。

a2dismod php<version>
a2enmod php<version>
systemctl restart apache2

スクリプトの冒頭では、if 条件を使用して、UID のステータス ビットを使用して、ユーザーがユーザー アカウントとしてログインしているか、ルート アカウントとしてログインしているかを確認します。

if ((UID)); then
something here
elif ((!UID)); then
something here
fi

((UID)) を使用してビットが真かどうかをチェックし、((!UID)) を使用してビットが偽かどうかをチェックしますが、ここで問題があります。Apache が実際に実行状態にあることを確認するために、もう少しチェックを追加したいのですが、次のようなものを使用するよりも、ブール値の true または false を使用する方がよいでしょう。

systemctl status apache2

大量の出力が得られます。Apache のステータス ビットはありますか? その場合は、phpmod バージョンの変更を続行する前に、Apache が実際に実行されているかどうかを確認できます。

これまでのスクリプトは次のとおりです。https://pastebin.com/HyCjbn59

IT では、Apache が実行中であるかどうかを確認するだけでなく、正しいモジュールを有効にする前に、さまざまな Apache PHP モジュールが実際にインストールされているかどうかを確認する必要があります。インストールされていない場合は、スクリプトが実行されます。

apt install libapache2-mod-php<version>

答え1

「少なくとも 1 つの [ユニット] がアクティブな場合は終了コード 0 を返し、そうでない場合は 0 以外の値を返す」is-activeユニット コマンドを使用できます。systemctl

if systemctl is-active --quiet apache2; then
  echo running
else
  echo not running
fi

最後のコマンドの終了コードを保持するパラメータを使用したい場合は$?、次のようにテストするだけです0

systemctl is-active --quiet apache2
if [ $? -eq 0 ]; then
  echo running
else
  echo not running
fi

参考文献

答え2

独自の終了コードを定義する場合でも、@Dessert が回答で説明しているのと同じロジックが使用されます。

#!/bin/bash

systemctl is-active -q apache2 && status=TRUE || status=FALSE

case $status in
  TRUE)
    echo do something ;;
  FALSE)
    echo do sothing else ;;
esac

関連情報