bash脚本:检查Apache服务器是否已启动并正在运行

bash脚本:检查Apache服务器是否已启动并正在运行,bash,apache,shell,Bash,Apache,Shell,我不熟悉bash脚本,并试图弄清楚为什么下面的脚本输出Apache服务器没有运行,而它运行正常 ps cax | grep httpd if [ $? -eq 0 ]; then echo "Process is running." else echo "Process is not running." fi 我在Ubuntu 14.04.2 LTS上运行它 另外,如何对脚本进行更改,以测试安装在另一台机器上的apache服务器。 请帮助而不是httpd尝试grep apache2。请确保

我不熟悉bash脚本,并试图弄清楚为什么下面的脚本输出Apache服务器没有运行,而它运行正常

ps cax | grep httpd
if [ $? -eq 0 ]; then
 echo "Process is running."
else
 echo "Process is not running."
fi
我在Ubuntu 14.04.2 LTS上运行它

另外,如何对脚本进行更改,以测试安装在另一台机器上的apache服务器。
请帮助而不是httpd尝试grep apache2。请确保尝试使用下一个命令检查服务,并确定apache Web服务器的注册名称: 服务-所有状态

使用以下选项:

service apache2 status
或者这个:

service --status-all | grep apache2

这项工作在旧的Debian中非常完美。记住使用bash而不是sh运行

在Centos中,替换为httpd

#!/bin/bash
if [ $(/etc/init.d/apache2 status | grep -v grep | grep 'Apache2 is running' | wc -l) > 0 ]
then
 echo "Process is running."
else
  echo "Process is not running."
fi

这是一个bash脚本的工作示例,它检查apache状态,在关闭时自动重新启动,并通过unicode表情符号中的电报机器人发出警报

#!/bin/bash
telegram=(xxxxx, yyyyyy)

if ! pidof apache2 > /dev/null
then
    # web server down, restart the server
    echo "Server down"
    /etc/init.d/apache2 restart > /dev/null
    sleep 10

    #checking if apache restarted or not
    if pidof apache2 > /dev/null
    then
        for i in "${telegram[@]}"
        do
        curl -s -X POST https://api.telegram.org/botxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyyyy/sendMessage -d chat_id="$i" -d text="`echo -e '\U0001F525'` Apache stoped on Molib Stage. Automatically restarted succesfully."
        done
    else
        for i in "${telegram[@]}"
        do
        curl -s -X POST https://api.telegram.org/botxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyyyy/sendMessage -d chat_id="$i" -d text="`echo -e '\U0001F525'` Apache stoped on Molib Stage. Automatically restart failed. Please check manually."
        done
    fi
fi

这是一个菜单驱动的一站式shell脚本,您可以在其中检查防火墙、apache或任何其他Web服务,只需选择下面脚本中的选项即可启动或停止服务

欢迎您选择您的选项 阅读选择 防火墙=`sudo systemctl status firewalld` apache=`sudo systemctl status apache2` 防火墙1=`sudo systemctl stop firewalld` apache1=`sudo systemctl stop apache2` startrfirewall=`sudo systemctl start firewalld` startapache=`sudo systemctl start apache2` 案例$choice 1防火墙的状态为$firewall ;; 2 apache的状态为$apache ;; 3通过$firewall停止echo防火墙1 ;; 4 echo stop apache by$apache1 ;; 5 echo通过$startrfirewall启动防火墙 ;; 6 echo通过$startapache启动apache ;; *回波出口 以撒
试试看-简单简单,最有教益,在Ubuntu 20.04上运行良好:

捕捉状态到bash变量的输出 如果状态包括Active:statement中的子字符串-执行所需的作业 否则-执行您定义的另一项工作
systemctl状态为apache2.service?如果说“systemctl”未找到,则无法使用sudo。我不记得Ubuntu是什么时候开始使用systemd的,但你可能会使用服务apache2 status。另外,你有apachectl status,我会选择apachectl status,因为它应该在任何一个操作系统版本中工作。如果我尝试ps cax | grep apache2,通常会有什么结果;这就是为什么你得到了一再的回复,敦促你放弃。您的问题是一个非常常见的常见问题-除非您是相关服务的开发人员,否则很少需要重新设计服务脚本。欢迎来到开发人员学习、分享和建立职业生涯的地方!感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。您可以尝试使用elif,而不是+1表示服务apache2状态。但是,service-status all | grep apache2不适用于OP的脚本:它返回$?==如果apache2服务存在但未运行,则为0。。。虽然这是一个很好的建议!xxx和yyy等是什么意思?我正在看电报文件,不太清楚。谢谢@marklark抱歉我不清楚。xxxx、yyyy是警报电报ID的收件人。
#!/bin/bash
telegram=(xxxxx, yyyyyy)

if ! pidof apache2 > /dev/null
then
    # web server down, restart the server
    echo "Server down"
    /etc/init.d/apache2 restart > /dev/null
    sleep 10

    #checking if apache restarted or not
    if pidof apache2 > /dev/null
    then
        for i in "${telegram[@]}"
        do
        curl -s -X POST https://api.telegram.org/botxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyyyy/sendMessage -d chat_id="$i" -d text="`echo -e '\U0001F525'` Apache stoped on Molib Stage. Automatically restarted succesfully."
        done
    else
        for i in "${telegram[@]}"
        do
        curl -s -X POST https://api.telegram.org/botxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyyyy/sendMessage -d chat_id="$i" -d text="`echo -e '\U0001F525'` Apache stoped on Molib Stage. Automatically restart failed. Please check manually."
        done
    fi
fi
#!/bin/bash
servstat=$(service apache2 status)

if [[ $servstat == *"active (running)"* ]]; then
  echo "process is running"
else echo "process is not running"
fi