我有一个经常失败的进程,有时会启动重复的实例。
当我跑步时:ps x |grep -v grep |grep -c "processname"
我会得到:2
这是正常的,因为该进程与恢复进程一起运行。
如果我有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
我的主要问题是找到一种根据结果采取行动的方法ps x |grep -v grep |grep -c "processname"
.
理想情况下,我希望将 grep 的结果设置为脚本中的变量,如下所示:
process=$(ps x |grep -v grep |grep -c "processname")
如果可能的话。
用于监视系统上的进程是否正在运行的程序。
脚本存储在crontab
每分钟运行一次。
如果进程未运行或进程运行多次,则这适用于:
#! /bin/bash
case "$(pidof amadeus.x86 | wc -l)" 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 个或更多,则终止最后一个。
一个更简单的版本。这只是测试进程是否正在运行,如果没有则重新启动它。
它只是测试退出标志$?
来自pidof
程序。这将是0
进程正在运行并且1
if not.
#!/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 &
然后可以在 crontab 中使用它每分钟运行一次,如下所示:
* * * * * pidof amadeus.x86 >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting Amadeus: $(date)" >> /var/log/amadeus.txt && /etc/amadeus/amadeus.x86 &
cccam 奥斯卡姆
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)