首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash -检查进程是否正在运行,否则启动它并使用"switch“大小写发送邮件。

Bash -检查进程是否正在运行,否则启动它并使用"switch“大小写发送邮件。
EN

Stack Overflow用户
提问于 2014-02-27 15:06:52
回答 2查看 1.1K关注 0票数 3

因此,我有一个小脚本来检查进程是否正在运行,如果没有,启动脚本并发送给我一封邮件。我编写的脚本(and is "inspired" from here)如下:

代码语言:javascript
复制
#!/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重新启动”。

我在哪里犯的错?我应用的逻辑中有错误吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-28 06:15:07

我觉得古鲁巴伦基本上是对的。我认为根本原因是您的简单杀死不会终止进程(正如我在测试时所发生的那样),因此运行的webrtc2sip实例的数量不会减少。尝试kill -kill,看看这是否解决了您的问题。

而且,您的代码每分钟只处理一个额外的webrt2cip实例。这样做可能更好:

代码语言:javascript
复制
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
;;

萨克

票数 2
EN

Stack Overflow用户

发布于 2014-02-28 16:24:17

我也是这么想的..。如果有一个以上的进程,那么你想要确保你想要杀死他们全部.否则,你会比你预期的更多地陷入这种情况。darylbnz解决方案应该是可行的。你也可以尝试‘杀死-9’,并确保进程被杀死。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22072425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档