我对 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