linux下用指令碼實現程序監控並重啟
文/PM回憶錄
本文大綱:
0.背景故事
1.shell指令碼怎麼寫
2.利用nohup後臺執行指令碼
3.如何殺死後臺程序
0.背景大綱
最近,在國外買了個伺服器,因為是OpenVZ架構,所以找了篇帖子搭建了SSR+BBR的通道,以下是帖子地址:
ofollow,noindex">OpenVZ架構VPS安裝BBR的五種方法(UML/LKL/LKL_Rinetd) | 可樂部落格
但是,兩天後,我的SSR莫名連線不上了,手動重灌了系統,重新配置了SSR,但是兩天後,事情又發生了。於是,我懷疑是我的VPS記憶體空間小導致記憶體溢位程式崩潰,於是,我開始想辦法讓SSR崩潰後重新連線,下面是我找到的一個辦法,shell指令碼判斷程序。
1.shell判斷程序指令碼怎麼寫
在終端輸入vi ssrscreen.sh,回車編輯指令碼:
#!/bin/sh date >> ssrcron.txt echo "the shell is running" >> ssrcron.txt while : do stillRunning=$(ps -ef |grep SCREEN |grep -v "grep") if [ -z "$stillRunning" ] then date >> ssrcron.txt echo "the screen was closed!!!!!!!!!!!!!!!!!" >> ssrcron.txt sh ./run.sh start date >> ssrcron.txt echo "the screen was started!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> ssrcron.txt fi sleep 10 done
以上是程式碼
執行指令碼:sh ssrcron.sh
關鍵語句解釋:
stillRunning=$(ps -ef |grep SCREEN |grep -v "grep") //判斷當前程序中是否存在SCREEN相關程序
if [ -z "$stillRunning" ] //如果判斷的返回結果為空
sh ./run.sh start //運營指令碼,重啟SCREEN程序
2.利用nohup命令後臺執行指令碼
當你使用sh方式執行指令碼的時候,如果關閉終端,那麼程序也會隨之中斷。這時候,就需要讓程序在後臺保持執行,我的辦法是利用nohup命令:
命令:nohup sh ssrcron.sh
這個命令會自動在本資料夾下生產nohup.out,你的sh ssrcron.sh的命令的輸出會列印在裡面。
3.如何檢視並殺死後臺程序
當你想關閉nohup程序的時候,可以使用ps -ef,來找到程序,如圖:

殺程序命令:kill -9 [pid],如我要殺死圖中程序,我的命令是:kill -9 11986,回車。
完