Linux服务器挂掉,使之自动重启脚本

实现原理

主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则执行我们预设的重启脚本

实现

1. 向crontab添加任务
	 - crontab -l 查询当前用户的任务
	 - 创建一个文件(server_cron)输入
	   * * * * * sleep 10; sh /路径/server_maintenance.sh
	 - cronrab server_cron  (生效)
2. shell脚本
	    #! /bin/sh
	    proc_name="./server"            #进程名
	    proc_num()                      #查询进程数量
	    {
	    	num=$(ps -ef |  grep gdms |grep $proc_name | grep -v "grep" | wc -l)
	    	echo $num
	        return $num
	    }
	    proc_num
	    number=$?                       #获取进程数量  
	    if [ $number -eq 0 ]            #如果进程数量为0
	    then                            #重新启动服务器,或者扩展其它内容。  
	        cd /home/liudongwei/workspace/server2.0/dist
	        nohup ./server &  
	    fi

参考:
https://www.cnblogs.com/leodaxin/p/9222969.html
https://blog.csdn.net/shanzhizi/article/details/8123854


上个版本经过实际应用,发现严重的问题:每隔一分钟就会执行一次脚本,如果有LOG日志的话,会发现你的磁盘快满了o(╥﹏╥)o

解决问题:

  1. 回顾了crontab相关知识

    • crontab -l
      查询当前用户任务
    • tail -f /var/log/syslog
      查看到执行任务命令之后在日志中的信息反馈
    • crontab -r
      删除当前用户任务
  2. 分析
            经过我在网上搜素相关问题,了解到有些脚本放在crontab定时器中执行,不会运行(就比如我上文提到的重启服务脚本),我上个脚本之所以执行成功,是因为 grep gram,其实我也不知道这是啥意思,我抄的。。。大意是搜索gram,这个哪有,所以函数proc_num() 返回值都是0。

  3. 解决

  • 一行一行的理解代码
  • 验证测试
  • 反正我是试出来的
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
#     echo
     num=$(ps -ef | grep $proc_name | grep -v "grep" | grep -v "sh" |wc -l)
#     echo $num
     return $num
}

总结

拿来,没有真正理解,会返工,只能多总结,多积累

你可能感兴趣的:(Linux网络编程)