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
}

總結

拿來,沒有真正理解,會返工,只能多總結,多積累

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章