如何检查正在运行的进程的状态位?

如何检查正在运行的进程的状态位?

好的,这是我的困境,我在 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-activeunit 命令,其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

相关内容