好的,这是我的困境,我在 Dell PowerEdge T710 服务器上运行无头 Ubuntu 服务器 18.04.3 LTS,并且我正在编写一个 bash 脚本,以便我可以轻松更改 Apache PHP Mod 版本,而不必继续手动使用:-
a2dismod php<version>
a2enmod php<version>
systemctl restart apache2
脚本的开头使用 if 条件来检查用户是否使用 UID 的状态位以用户帐户或 root 帐户身份登录,即:-
if ((UID)); then
something here
elif ((!UID)); then
something here
fi
使用 ((UID)) 检查位是否为真,使用 ((!UID) 检查位是否为假,但问题是,我想添加更多检查以确保 apache 实际上处于运行状态,我宁愿使用布尔值 true 或 false,也不愿使用类似以下内容:-
systemctl status apache2
这会产生大量输出。apache 有状态位吗?然后我可以进行检查以确保 apache 确实在运行,然后再继续更改 phpmod 版本。
这是我迄今为止的脚本:https://pastebin.com/HyCjbn59
IT 不仅需要检查 Apache 是否正在运行,还需要检查各种 Apache PHP 模块,以确保在尝试启用正确的模块之前它们确实已安装,如果没有,则脚本将执行:-
apt install libapache2-mod-php<version>
答案1
您可以使用is-active
unit 命令,其systemctl
“如果至少有一个 [unit] 处于活动状态,则返回退出代码 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