东东东 陈煜东的博客

使用bash shell脚本编写简易的看门狗watch dog

发现有个定时上报的脚本,突然挂了,导致数据收集不到。查看了下,居然是数据库获得锁失败了。

单个脚本那边运行,肯定有风险存在,不知道之前的人怎么都没有注意到这个问题。为了解决这个问题,中午编写了一个看门狗的shell脚本,让其每隔固定的时间检查一下进程,如果没有发现进程就拉起来。否则就休眠一段时间。

看门狗shell脚本的编写

#!/bin/bash
now=`date '+%Y-%m-%d %H:%M:%S'`

grepFlag='grepDataReport'
thisLog='/data/report/watchlog'

baseDir="/data/report"
sleepTime=60

if [ ! -f "$baseDir/run.sh" ]; then
    echo "$baseDir/run.sh missing, check again" > "$thisLog"
    exit
fi

#user=`whoami`
user="root"
if [ "$user" != "root" ]; then
    echo "this tool must run as *root*"
    exit
fi

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
        cd $baseDir
        echo "$now process not exists ,restart process now... " > "$thisLog"
        ./run.sh
        echo "$now restart done ..... "  > "$thisLog"
        cd $curDir
    else
        echo "$now process exists , sleep $sleepTime seconds " > "$thisLog"
    fi
    sleep $sleepTime
done

在写这个脚本的时候,遇到了一些问题,主要是很久没有编写shell脚本了,有些忘记了。

在声明变量的时候 grepFlag = 'DataReport',提醒说命令不存在,原来是多了空格,生命变量必须紧邻=号才行。

多次启动一个程序。之前是因为变量没取到,获取不到进程。在if [ $ret -eq 0 ]里发现0,一直拉起进程,后来变换一下if分支的内容。使用判断如果进程查不到,就启动,如果启动多个,没有做处理。

在使用输出重定向的时候,我从 >> 改用为 > 。因为我觉得每次echo出来的文字都追加到一个文件里去,时间一长,这个文件会很大。于是我就直接改成覆盖,看最后一个消息是什么即可判断,还有查看文件的时间戳判断一下进程的情况。

后台运行程序run.sh的编写

后台的程序

nohup /usr/local/php/bin/php run.php grepDataReport &

注意这里一定要使用nohup。之前没有使用nohup,当终端没有关闭的时候,我kill了这个程序,会自动拉起,但是我退出终端,重新打开一个终端去kill后,发现无法拉起进程了。

注意使用nohup启动的时候,可能需要按一下按键,

nohup与&的区别

nohup是让命令忽略SIGHUP命令而已,退出终端后可以继续运行;&则让命令在后台运行,至于该命令是否能在退出终端后继续执行则要看进程是否是守护进程,如果不是,则需要nohup来帮忙。

nohup命令及其输出文件nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( nohang up)。

该命令的一般形式为:nohup command &使用nohup命令提交作业如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:nohup command > myout.file 2>&1 &在上面的例子中,输出被重定向到myout.file文件中。

PS.粗略看一下,发现shell脚本和python脚本感觉有些像,不用封号结尾,直接使用变量。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 使用bash shell脚本编写简易的看门狗watch dog – https://www.chenyudong.com/archives/bash-shell-watch-dog-auto-restart-process.html

分类: Linux

PuTTY设置SSH端口代理转发 » « Nginx上搭建WordPress及配置 完美迁移

1 评论

  1. 你好,请问 $curDir的值是啥

发表评论

邮箱(不会被公开)

*

Copyright © 2018 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑