所以我有一个小脚本来检查进程是否正在运行,如果没有,则启动脚本并向我发送邮件。我写的脚本(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不会改变,但我每分钟都会收到第一封邮件“ALERT:webRTC2sip”。
我在哪里弄错了?我应用的逻辑中是否有错误?
提前致谢。
答案 0 :(得分:1)
我认为Gurubaran大部分都是对的。我认为根本原因是你的简单kill不会终止进程(正如我在测试时发生的那样),因此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
;;
esac`
答案 1 :(得分:0)
是的我也这么认为..如果有多个进程,那么你想确保你想要杀死所有进程......否则你会比你预期的更多地陷入这个*)。 darylbnz解决方案应该正常工作。您也可以尝试'kill -9'并确保该进程被终止。