(本文源自 用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