流媒体使用过程中发现SRS没有链接的时候非常容易自动停止所以我加了一个shell脚本来自动检测srs的运行情况
内容:Shell脚本;进程检查(pgrep);定时任务(crontab)
Step 1 编写Shell脚本
这个脚本执行以下任务——检查特定名字的进程是否在运行,如果没有运行则执行启动命令并输出一行记录到日志,如果进程正在运行也添加一条记录到日志。
创建脚本(放在哪里其实都可以)
//创建监听日志
cd /var/log
touch srslisten.log
//创建监听脚本
cd /usr
mkdir shellboot
cd shellboot
touch listen.sh
#vi编辑listen.sh
进入vi编辑脚本内容
#!/bin/bash
cd /root/srs/trunk
processnum=$(pgrep srs |wc -l)
processid=$(pgrep srs)
if [[ "$processnum" -gt "0" ]];then
echo "有SRS启动进程ID$processid">> /var/log/srslisten.log
echo "时间`date`">> /var/log/srslisten.log
else
nohup ./objs/srs -c conf/push.gb28181.conf >/dev/null 2>&1 &
echo "没有SRS启动`date` restart">> /var/log/srslisten.log
fi
完成后保存并退出,开始测试运行,首先给脚本赋予权限
sudo -s chmod 777 listen.sh
测试运行
./listen.sh
如果测试前进程已经运行,那么可以用kill -9杀掉再运行两次,并检查log文件。确认脚本工作正常后可以进行下一步了。
Step2 开启定时任务
crontab是一个周期性任务时间表,可以定时或按给定间隔时间运行特定脚本与任务。
编辑crontab表
crontab -e
进入vi,在文件最后插入
MAILTO=""
*/1 * * * * /etc/shadowsocks/listen.sh
(注意空格)
MAILTO="" 用于关闭发送邮件,否则返回值会做成邮件发送给本机,删掉本行后即可收取返回值
crontab每一行的结构如下
定时任务的设置规则:
Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed
关心【*】的含义就行,后面先不用管
五个*由左至右分别为:【分钟】、【小时】、【日】、【月】、【星期】,用来设置执行周期
而*/1代表的是“每隔多久”执行一次,上文的含义就是每隔1分钟执行一次/usr/shellboot/listen.sh脚本
保存退出,接着重启crond服务
service crond restart
等几分钟,杀进程后再看看日志情况。
相关命令
crontab -l,查看当前用户定时任务列表
crontab -r,删除当前用户的crontab文件
可以指定某个用户 crontab -u xx option
安装crontab
yum install vixie-cron,cron主程序
yum install crontabs,cron程序的外壳,用来驱动cron
启动服务
systemctl start crond
停止服务
systemctl stop crond
重新加载服务
systemctl reload crond
重启服务
systemctl restart crond
查看服务运行状态
systemctl status crond
设置开机启动
systemctl enable crond
查看是否开机启动
systemctl list-unit-files | grep crond
参考链接https://blog.csdn.net/qq_42146669/article/details/80213061