我目前有2个bash脚本:
1)tomcat.sh
#!/bin/bash
case "$1" in
'start')
/home/testuser/start.sh
;;
'status')
/home/testuser/status.sh
;;
esac
2)status.sh
#!/bin/bash
COUNT="$( ps -ef | grep tomcat| wc -l )"
echo ${COUNT}
if [ "${COUNT}" -eq 2 ]
then
echo "Tomcat is running."
else
echo "Tomcatis not running"
fi
当我通过以下两种方法检查状态时:
./tomcat.sh status
:${COUNT}
回显值4
。
status.sh
:${COUNT}
回显2
的值。
我不确定为什么会有差异。我期望echo
的两个值都匹配,因为它们实际上是在执行status.sh
。我想念什么吗?
编辑:添加了我正在使用的实际搜索值。
答案 0 :(得分:1)
当tomcat.sh
中的ps -ef
运行时,您的status.sh
仍在运行。因此,在使用tomcat.sh
ps的情况下,至少找到以下条件:
现在,我不确定第四位来自哪里。
如果仅运行状态脚本,则找不到tomcat.sh,因此结果较少。一个解决方案可能是使grep更加适合您的用例,或者使用更特定于您的任务的东西,例如pgrep(尽管pgrep java
可能还会给您其他不需要的进程)。
可能的解决方案:
COUNT="$( ps -ef | grep "tomcat" | grep "org.apache.catalina.startup.Bootstrap" | wc -l )"
编辑:使用pidfile当然也是一种方法。在该问题中,您将显示类似于启动脚本的内容。因此,在启动时编写一个pidfile,然后在查询时读取并使用该pidfile,就可以知道该服务是否已启动。但是,如果有人使用其他方式启动该服务,它将无法正常工作。