因此,我有一个小脚本来检查进程是否正在运行,如果没有,启动脚本并发送给我一封邮件。我编写的脚本(and is "inspired" from here)如下:
#!/bin/bash
case "$(pidof webrtc2sip | wc -w)" in
0) echo "Restarting WebRTC2SIP: $(date)" >> /var/log/webrtc2sip.txt
echo "Restarting WebRTC2SIP at $(date)" > test.txt
/opt/webrtc2sip/sbin/webrtc2sip --config=/opt/webrtc2sip/sbin/config.xml &
mail -r webrtc2sip@testserver.net -s "ALERT: webRTC2sip restarted" me@testserver.com < test.txt
;;
1) # all ok
;;
*) echo "Removed multiple WebRTC2SIP: $(date)" >> /var/log/webrtc2sip.txt
echo "Removed multiple WebRTC2SIP at $(date)" > test1.txt
kill $(pidof webrtc2sip | awk '{print $1}')
mail -r webrtc2sip@testserver.net -s "ALERT: webRTC2sip multiple processes killed" me@testserver.com < test1.txt
;;
esac我设置了一个cron,让它每分钟执行一次(* * * * * /path/to/script)。
现在,我认为正在发生的是,第一个案件被反复执行。我不确定,因为webrtc2sip PID没有改变,但是我每分钟都会收到第一个邮件“警报: webRTC2sip重新启动”。
我在哪里犯的错?我应用的逻辑中有错误吗?
提前谢谢。
发布于 2014-02-28 06:15:07
我觉得古鲁巴伦基本上是对的。我认为根本原因是您的简单杀死不会终止进程(正如我在测试时所发生的那样),因此运行的webrtc2sip实例的数量不会减少。尝试kill -kill,看看这是否解决了您的问题。
而且,您的代码每分钟只处理一个额外的webrt2cip实例。这样做可能更好:
case "$(pidof webrtc2sip | wc -w)" in
0) echo "Restarting WebRTC2SIP: $(date)" >> /var/log/webrtc2sip.txt
echo "Restarting WebRTC2SIP at $(date)" > test.txt
/opt/webrtc2sip/sbin/webrtc2sip --config=/opt/webrtc2sip/sbin/config.xml &
mail -r webrtc2sip@testserver.net -s "ALERT: webRTC2sip restarted" me@testserver.com < test.txt
;;
1) # all ok
;;
*) echo "Removed multiple WebRTC2SIP: $(date)" >> /var/log/webrtc2sip.txt
echo "Removed multiple WebRTC2SIP at $(date)" > test1.txt
while [ $(pidof webrtc2sip | wc -w) -ne 1 ]
do
kill -kill $(pidof webrtc2sip | awk '{print $1}')
done
mail -r webrtc2sip@testserver.net -s "ALERT: webRTC2sip multiple processes killed" me@testserver.com < test1.txt
;;萨克
发布于 2014-02-28 16:24:17
我也是这么想的..。如果有一个以上的进程,那么你想要确保你想要杀死他们全部.否则,你会比你预期的更多地陷入这种情况。darylbnz解决方案应该是可行的。你也可以尝试‘杀死-9’,并确保进程被杀死。
https://stackoverflow.com/questions/22072425
复制相似问题