在 bash 脚本中将进程状态用作布尔值

在 bash 脚本中将进程状态用作布尔值

我对 Linux 脚本仍然很陌生,但对编程作为范例来说并不陌生,所以如果我的问题有一个非常明显的答案,请原谅我。

背景:我想编写一个启动脚本,仅检查进程是否已启动,如果尚未启动,则启动它。更具体地说,我想检查 iptables、fail2ban、asterisk 和 mysqld 在重新启动后是否已正常启动。

我希望脚本以真/假方式确定给定服务的状态。 IE 我希望脚本在服务是否处于活动状态时给出 true 或 false。

我尝试过在论坛上找到的几个“ps -aux”和“ps -ef”选项,但它们并没有真正给我想要的结果,或者也许我只是没有正确理解解释。

我只是希望能够确定服务是否以有意义的方式运行,并使用结果确定启动脚本的逻辑流程。

预先感谢您的任何回复,如果问题发布在错误的地方,我们深表歉意。

答案1

一些粗略的测试表明,在我的系统上,该service实用程序在检查未运行的服务的状态时将返回退出代码 3。因此,这可能对你有用:

for svc in iptables fail2ban asterisk mysqld; do
    if ! service "$svc" status > /dev/null 2>&1; then
        echo "$svc is either not running or is an indeterminate state."
    fi
done

相关内容