实现原理
主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则执行我们预设的重启脚本
实现
1. 向crontab添加任务- crontab -l 查询当前用户的任务- 创建一个文件(server_cron)输入* * * * * sleep 10; sh /路径/server_maintenance.sh- cronrab server_cron (生效)2. shell脚本
#! /bin/shproc_name="./server" #进程名proc_num() #查询进程数量{num=$(ps -ef | grep gdms |grep $proc_name | grep -v "grep" | wc -l)echo $numreturn $num}proc_numnumber=$? #获取进程数量 if [ $number -eq 0 ] #如果进程数量为0then #重新启动服务器,或者扩展其它内容。 cd /home/liudongwei/workspace/server2.0/distnohup ./server & fi
参考:
/leodaxin/p/9222969.html
/shanzhizi/article/details/8123854
上个版本经过实际应用,发现严重的问题:每隔一分钟就会执行一次脚本,如果有LOG日志的话,会发现你的磁盘快满了o(╥﹏╥)o
解决问题:
回顾了crontab相关知识
crontab -l
查询当前用户任务tail -f /var/log/syslog
查看到执行任务命令之后在日志中的信息反馈crontab -r
删除当前用户任务
分析
经过我在网上搜素相关问题,了解到有些脚本放在crontab定时器中执行,不会运行(就比如我上文提到的重启服务脚本),我上个脚本之所以执行成功,是因为grep gram,其实我也不知道这是啥意思,我抄的。。。大意是搜索gram,这个哪有,所以函数proc_num() 返回值都是0。
解决
一行一行的理解代码验证测试反正我是试出来的
proc_num(){#ps -ef | grep ./server#echo #ps -ef | grep ./server | grep -v "grep"#echo#ps -ef | grep $proc_name | grep -v "grep" | grep -v "sh"#echo#ps -ef | grep $proc_name | grep -v "grep" | wc -l#echo#ps -ef | grep $proc_name | grep -v "grep" | grep -v "sh" |wc -l#echonum=$(ps -ef | grep $proc_name | grep -v "grep" | grep -v "sh" |wc -l)#echo $numreturn $num}
总结
拿来,没有真正理解,会返工,只能多总结,多积累
如果觉得《Linux服务器挂掉 使之自动重启脚本》对你有帮助,请点赞、收藏,并留下你的观点哦!