注:腳本名中最好不要包含ngrokd, 因為腳本執行時自己也會成為一個進程,獲取原始ngrokd的進程大小就不能簡寫為
grep "ngrokd"
,而應改為全路徑:grep "
/usr/local/ngrok/bin/ngrokd
", 而且pkill會把腳本本身結束掉, 但是為了更加通用以下按全路徑寫,不采用簡寫,腳本名可以隨意寫.
腳本作用:當ngrokd進程占用內存大於
10000時,重啟進程,如果沒有這個進程,則啟動進程.
ngrokd的程序在:/usr/local/ngrok/bin/ngrokd,可以根據自己情況進行修改
腳本名:restart-ngrokd.sh
腳本如下,將這個腳本放在/usr/local/sbin目錄下:
#!/bin/bash
#/usr/local/ngrok/bin/ngrokd -domain=xiejl.com -httpAddr=:80 &> /dev/null &
param=" &> /dev/null &"
memsize=`ps -aux | grep "/usr/local/ngrok/bin/ngrokd" | grep -v grep | awk '{printf $6 }'`
echo $memsize
if [[ $memsize -gt 10000 ]]; then
echo "restart begin"
ngrok_restart=`ps -aux | grep "/usr/local/ngrok/bin/ngrokd" | grep -v grep | awk '{for(i=11;i<=NF;i++)printf $i " "}'`
echo $ngrok_restart
pkill -f
/usr/local/ngrok/bin/ngrokdeval "$ngrok_restart $param"
echo "restart over"
elif [ -z $memsize ]; then
echo "start begin"
eval "/usr/local/ngrok/bin/ngrokd -domain=xiejl.com -httpAddr=:80 $param"
echo "start over"
fi
腳本解釋:
param 變量是讓ngrok這個程序后台執行的參數
memsize 變量是ngrok的內存占用大小
if [[ $memsize -gt 10000 ]]; then 這里不能寫單中括號[ xxx ],加入
$memsize是空的,
寫[ xxx ]會出錯,所以用[[ xxx ]]
eval 是將命了和字符串參數拼接起來執行,當做一條命令執行.
pkill -f 進程全名. 結束匹配的全名,加入-f參數
awk '{for(i=11;i<=NF;i++)printf $i " "}' 是將前面的結果中的第11列到后面的內容全部截取出來.
加入定時任務,定時重啟程序:
查看時間和時區:
date -R
如果結果后面不是 +0800,那就不是東八區,不是中國時間.
可以修改為中國時間:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
再次查看時間,看是否變回來了.
加入定時任務,凌晨4點重啟:
crontab -e
添加:
0 4 * * * /usr/local/sbin/restart-ngrokd.sh
以后每天凌晨4點程序自動重啟,不用擔心程序會導致系統宕機了.