版权声明:本文为博主原创文章,欢迎转载,请尊重原创,转载注明链接。 https://blog.csdn.net/qqliyunpeng/article/details/81321541
1. 需求
在实际编写应用程序的时候,可能会出现如下场景,你正在开发阶段,但是你的上层,可能也要测试,此时,你的程序不定时的因为某种原因会蹦掉,但其实你不关心,因为在开发阶段,具体原因留待以后解决,此时,一个保证你程序能自动重启的机制就需要了。
2. 正文
2.1 保证进程不退出的思路大致是这样的:
(1)用 ps 查看进程
(2)在进程退出的时候,重启进程
有了思路,我们还要确认的一点是,多长时间去执行一会这个步骤。假设10s,接下来便是用crontab来每10s查看一下进程中有没有ss.out进程,如果没有,将重新启动进程。
2.2 代码
crontab的设置如下:
> crontab -e
这里可能会提示没有 /var/spool/cron/crontabs 这个文件夹,我们创建即可
> mkdir -p /var/spool/cron/crontabs
在弹出的编辑器里输入如下内容
* * * * * /home/root/retain_program.sh
* * * * * sleep 10; /home/root/retain_program.sh
* * * * * sleep 20; /home/root/retain_program.sh
* * * * * sleep 30; /home/root/retain_program.sh
* * * * * sleep 40; /home/root/retain_program.sh
* * * * * sleep 50; /home/root/retain_program.sh
【1】crontab设置的意思是没1分钟,执行上边代码中的内容,这个的意思就是每10s执行一次 /home/root/retain_program.sh 脚本
接下来我们编写 /home/root/retain_program.sh 脚本
#!/bin/sh
cnt=`ps | grep ss.out | grep -v "grep" | wc -l`
if [ $cnt -eq 0 ]
then
echo `date` >> /home/root/1.txt
/home/root/ss.out&
fi
【1】在每次检查到没有 ss.out 进程的时候,把此时的时间追加的形式写到1.txt中,并且重新启动进程ss.out
启动crontab守护进程
> crond