好吧,這是我的困境,我在 Dell PowerEdge T710 伺服器上運行無頭 Ubuntu 伺服器 18.04.3 LTS,並且我正在編寫 bash 腳本,以便我可以輕鬆更改 Apache PHP Mod 版本,而無需手動使用: -
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
您可以使用is-active
unit命令,systemctl
其中「如果至少有一個[unit]處於活動狀態,則[r]返回退出代碼0,否則返回非零」:
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