用 Shell 脚本实现监控程序自动重启

(本文源自 用shell脚本实现监控程序自动重启 ,并在其基础上做了一些改动,感谢在 CSDN 上的原作者 loveheronly

 

因为舰娘群里有个 dalao 的 bot 托管在我的 VPS 上经常挂,导致我需要经常手动上去重启它。

昨晚被 HJC 聚聚骂醒了说,“劳伦斯你就是懒得写脚本”,“不会就去学呀”。

想来也对,与其次次被人发现挂了以后手动重启还不如去学学怎么写脚本。

于是在百度上博众家之长,便有了这篇东西

 

代码实现


这个 Shell 的作用主要是实现监控某个程序崩溃之后就自动重启。


#!/bin/bash
while true
do
procnum=` ps -ef|grep "Ooyodo"|grep -v grep|wc -l`
if [ $procnum -eq 0 ]; then
/home/lawrence/ooyodo-bot/Ooyodo
fi
sleep 30
done

脚本解读


procnum 用于判断 Ooyodo 这个进程是否在运行。

– eq 0 是 等于 0 的意思 。

这是个循环运行的脚本,每隔 30s 就检查 procnum 的值,如果 procnum = 0 (意为 Ooyodo 这个进程没有运行),则启动 /home/lawrence/ooyodo-bot/Ooyodo

 

运行脚本


脚本写好以后,在运行前需要为它赋予相应的操作权限(此处假设脚本名为 run_start.sh)

chmod 777 run_start.sh

使用以下命令启动

./run_start.sh &

记得加上&,不然窗口会话结束,脚本也会跟着结束。

 

注意事项


如果脚本是在 Windows 下编写的,那么在 Linux 下运行的时候可能提示-bash: ./run_start.sh: /bin/bash^M: bad interpreter: 没有那个文件或目录 ,这是因为 Linux 无法识别 Windows 的DOS 格式。如果遇到 bad interpreter 的错误,请务必对字符做一下转换,方法如下:

1)编辑出错文件
vi run_start.sh

2)查看该格式(报错文件格式是 DOS )
:set ff
3)修改格式
:set ff=unix

4)保存退出
:wq

这时再重新运行脚本,应该就可以正常运行了

设置开机自动启动


 

修改 /etc/rc.local 并在文件末尾添加一行

/home/lawrence/ooyodo-bot/run_start.sh &

(此处替换为脚本所在的路径)

 

后话(另一段脚本)


群里的 dant 聚聚给出了另外一段 Shell 脚本,也能达到同样的效果

此处给出代码,具体就不解释了


#!/bin/bash
while true
do
/home/lawrence/ooyodo-bot/Ooyodo
sleep 3
done

 

发布者

Lawrence

不过一介御用闲人

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理