さて、私のジレンマは、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