我的流程经常失败,有时会启动重复的实例。
运行时: ps x |grep -v grep |grep -c "processname" 我将得到: 2 这是正常现象,因为该过程与恢复过程一起运行。
ps x |grep -v grep |grep -c "processname"
2
如果我得到, 0 我将要开始以下过程: 4 我将要停止并重新开始该过程
0
4
我需要的是一种获取结果的方法 ps x |grep -v grep |grep -c "processname"
然后设置一个简单的3选项功能
ps x |grep -v grep |grep -c "processname" if answer = 0 (start process & write NOK & Time to log /var/processlog/check) if answer = 2 (Do nothing & write OK & time to log /var/processlog/check) if answer = 4 (stot & restart the process & write NOK & Time to log /var/processlog/check)
该过程停止与 killall -9 process 该过程开始 process -b -c /usr/local/etc
killall -9 process
process -b -c /usr/local/etc
我的主要问题是找到一种对的结果采取行动的方法ps x |grep -v grep |grep -c "processname"。
理想情况下,我想使grep的结果成为脚本中的变量,如下所示:
process=$(ps x |grep -v grep |grep -c "processname")
如果可能的话。
监视系统上的进程是否正在运行的程序。
脚本存储在其中,crontab并且每分钟运行一次。
crontab
#! /bin/bash case "$(pidof amadeus.x86 | wc -w)" in 0) echo "Restarting Amadeus: $(date)" >> /var/log/amadeus.txt /etc/amadeus/amadeus.x86 & ;; 1) # all ok ;; *) echo "Removed double Amadeus: $(date)" >> /var/log/amadeus.txt kill $(pidof amadeus.x86 | awk '{print $1}') ;; esac
0如果找不到进程,请重新启动它。 1如果找到过程,一切正常。 *如果进程运行2个或更多,请杀死最后一个。
1
*
它只是测试出口标志$?从pidof程序。它将0是正在运行的进程,1如果没有运行。
$?
pidof
#!/bin/bash pidof amadeus.x86 >/dev/null if [[ $? -ne 0 ]] ; then echo "Restarting Amadeus: $(date)" >> /var/log/amadeus.txt /etc/amadeus/amadeus.x86 & fi
pidof amadeus.x86 >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting Amadeus: $(date)" >> /var/log/amadeus.txt && /etc/amadeus/amadeus.x86 &
cccam oscam