首先介绍一下我现在的需求,我服务器上挂了一个用python编写的kook机器人,但有时候机器人程序会异常终止,不知道什么原因,因此需要监控机器人程序是否有在运行,如果没有就重启机器人程序。
可以写一个Shell脚本,来实现这个需求。
shell的入门教程可以看一眼这个
具体步骤如下:
- 首先新建一个helloworld.sh文件
- 给helloworld.sh执行权限:
chmod +x helloworld.sh
,linux中新建的文件默认没有执行权限 - 在helloworld.sh里写自己想实现的功能,这里我实现的功能是查询main.py进程是否在运行,每2秒就查询一次,如果不在运行就重启。
#!/bin/bash
while true
do
monitor=$(ps aux | grep main.py | grep zzy | grep -v grep | wc -l)
if (( $monitor == 0 ))
then
echo "$monitor DEAD, RESTARTING...... $(date)"
# 添加你的重启命令
/home/zzy/anaconda3/bin/python ./squad-kot/main.py &
else
echo "$monitor RUNNING $(date)"
fi
sleep 2
done
注意重启命令结尾要加一个&,表示让重启进程在后台运行,不影响当前终端,不加的话bash进程会停止输出到屏幕上,而让重启进程的输出显示在屏幕上。
- 运行helloworld.sh文件:
./helloworld.sh
显示效果:
手动kill -9机器人程序后,效果如下图所示,可以看到机器人程序因异常终止后,可以自动重启。
one more thing:
shell脚本的存放位置要和要监控进程的文件放在同一路径下,因为进程在哪个路径下被运行起来,哪个路径就是进程的工作目录,不然有可能用相对路径读取文件时发生错误[2]。