所以我有一个小脚本检查一个进程是否正在运行,如果没有,启动脚本并发送给我一个邮件。 我写的脚本( 从这里“受到启发” )如下:
#!/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 restarted”。
我犯了什么错误? 在我申请的逻辑中是否有错误?
提前致谢。
我想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`
是的,我也这么认为。如果有多个流程,那么你想确保你想把它们全部杀死…否则你会比预期的更频繁地陷入这种情况。 darylbnz解决方案应该工作。 你也可以尝试'杀死-9',并确保这个过程被杀死。