shell脚本监控&自动拉起程序

自己在服务器跑一些需要长期运行的程序时,偶尔会因为一些奇怪的原因挂掉,如果要人为去检查很麻烦,因此最好能够实现自动的检测和挂掉拉起。

有一个好的工具是supervisor,这是一套基于python的进程监控工具,能够进行简单的配置就达到我们的需求,为你监测你的进程并自动拉起挂掉的程序。

但如果你和我一样使用没有root权限的服务器,安装工具都是一件麻烦事,那也可以自己动手写一套shell脚本来监测和自动拉起,并不难。

以下就是我们的shell监测脚本monitor.sh

#!/bin/bash

now=`date '+%Y-%m-%d %H:%M:%S'` # 定义log的时间格式
grepFlag='myWorkingProcess.js' # 你要监测的程序名
thisLog='./watchlog' # 该脚本的log日志文件

baseDir="."
sleepTime=60s # 监测间隔

# 检查是否有我们的拉起脚本run.sh
if [ ! -f "$baseDir/run.sh" ]; then
    echo "$baseDir/run.sh missing, check again" >> "$thisLog"
    exit
fi

# 无限循环(0<1)
while [ 0 -lt 1 ] 
do
    now=`date '+%Y-%m-%d %H:%M:%S'`
    ret=`ps aux | grep "$grepFlag" | grep -v grep | wc -l`
    if [ $ret -eq 0 ]; then # 如果ps找不到运行的目标进程就拉起
        echo "$now process not exists ,restart process now... " >> "$thisLog"
        ./run.sh
        echo "$now restart done ..... "  >> "$thisLog"
    else
        echo "$now process exists , sleep $sleepTime seconds " >> "$thisLog"
    fi
    sleep $sleepTime
done

基本代码中都注释了,首先通过 -f 判断我们的拉起脚本run.sh是否存在。
然后通过一个无限循环(0小于1则循环)来用ps grep做目标进程的检查,如果不存在(ret返回0),那就拉起,如果存在,就只打log。然后sleep一段间隔时间。
这个sleep很自由,支持的时间单位有秒、分、时,默认的单位是秒。所以可以:

sleep 1    # 睡眠1秒
sleep 1s   # 睡眠1秒
sleep 1m   # 睡眠1分
sleep 1h   # 睡眠1小时

自行根据业务场景选择间隔时间。
注意这里的baseDir变量,我是将带监控的程序、检测脚本、拉起脚本都放在同一个目录下了,所以一个 . 足矣,具体要根据自己的目录结构来修改。

代码中可以看到我们把echo的log输出都放到指定的日志文件中去了,这里我们用的是>>,如果用>,那么每次打log都会覆盖全文,从头开始写,如果用>>,就是在文件末尾接着写,看具体需要,如果间隔太短,建议覆盖。

然后我们写拉起脚本run.sh

nohup node myWorkingProcess.js > log_myWorkingProcess.log 2>&1 &

拉起脚本很简单,就是你平常启动程序时的语句,这里我用了nohup+&来后台运行程序,并制定程序的输出日志文件,指定log输出到myWorkingProcess.log,2>&1将标准出错重定向到标准输出,也就是不管是错误日志还是常规日志都输出到同一个文件。

此时就可以运行monitor脚本来开始监控了。

nohup sh ./monitor.sh &

这里我同样使用nohup+&,&是为了让脚本在后台运行,不影响我在终端做其他命令操作,nohup是为了保证我关闭终端后脚本依然运行,不然就会在我关闭终端时脚本也退出。

如果此时出现了“$'\r':command not found”错误,那是因为脚本再win下编写,win的每行结尾是\r\n,而Unix 行尾标志是\n,就会认为这里的\r是个字符,但是又不认识,因此报错。这时用dos2unix工具处理一下即可:

dos2unix monitor.sh
dos2unix run.sh

再运行就不会报错了。

此时可以去日志文件看看,已经有日志了。也可以手动kill掉监测的进程,看看是否会自动拉起。


查看作者首页

References:
https://www.chenyudong.com/archives/bash-shell-watch-dog-auto-restart-process.html
https://blog.csdn.net/xiaojun111111/article/details/82752599
https://blog.csdn.net/xiaojun111111/article/details/82752599

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容