shell脚本监控程序异常退出并自动重启

一些设备,要求24小时不间断运行,但我们(小白、菜鸟)在写设备板卡上加载的arm程序的时候,就是检查得再仔细,程序也有可能在某个时刻发生异常退出,怎样保证我们的设备能始终运行,通常我们会采用看门狗等方式来监控运行状态,及时修正异常。从软件的层面考虑,我们还经常采用编写监控脚本的方式来重启异常退出的程序。下面以myTest程序为例,编写一个shell脚本,当发现程序异常退出时,重启程序,脚本内容如下:
keepalive.sh

#! /bin/bash
while true do
	monitor=`ps -ef | grep myTest | grep -v grep | wc -l ` 
	if [ $monitor -eq 0 ] 
	then
		echo "Program is not running, restart myTest"
		./root/myTest &
	else
		echo "Program is running"
	fi
	sleep 30
done

将脚本配置到启动文件中,设置运行权限即可。

下面是脚本的解释,也是参考了网友写的注释,写的很详细,对于没有shell基础的人来说很容易看懂。

脚本解释:
#! /bin/bash

其中#!为Sha-bang符号,是shell脚本的起始符号,告诉Linux系统这个文件需要指定解释器; /bin/bash 指明了解释器所在的路径,对于一般的shell脚本而言,解释器可以是bash,也可以是sh。

while … do … done

shell脚本里while循环的用法


monitor=`ps -ef | grep myTest | grep -v grep | wc -l ` 

上面这一句的作用是把后面指令运行的结果赋值给monitor,注意等号“=”前后不要有空格表示赋值,如果有空格则表示判断是否相等。
注意符号 ` 不是单引号 ’ ,位置是数字键1左边的那个键,上面是~,下面是它,它叫反引号或者又叫后引号,这个引号包围的为命令,可以执行包围的命令,并将执行的结果赋值给变量。
ps -ef 指令中ps的意思是process status,即进程状态, -ef 是ps命令的选项,表示以详细格式显示所有进程内容。
竖线 “|” 称为管道符号,是Linux系统一个很强大的功能,表示把前一个命令的输出结果传递给后一个命令处理。
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。后面的myTest是要搜索的关键字。
grep -v grep: 其中 -v 是grep命令的选项,表示反向选择,这几个字符表示在前面搜索结果的基础上去除掉带有grep关键字的内容。 因为使用 ”grep+关键字“ 命令搜索时会有一个grep本身的进程,而且带有搜索的关键字,这个就是要排除自身搜索的影响。
wc -l : wc命令统计指定文件中的字节数、字数、行数,并将统计结果显示输出。选项 ”-l “ 表示统计行数。
综合起来这句指令的意思就是:
以详细格式查看所有进程,从中选出具有关键字 myTest的进程,但是排除掉用于查找的grep自身进程,对于满足上面条件的结果,统计其行数,也就是看有几个带有myTest关键字的进程,将统计的结果赋值给变量monitor 。


if…then…else…fi

shell脚本里面 if 语句的用法, fi 符号与 if 符号成对使用,表示 if 语句的结束。


if [ $monitor -eq 0 ]

if 语句的判断用 test 或者 “[ ]” ,符号” $“ 表示取变量的值, -eq表示等于, -gt大于, -lt小于, -ge大于等于,-le小于等于。

echo  用于输出显示。
./root/myTest & 用于运行myTest 程序,&在背后运行。
sleep 30 : 休眠30秒钟,然后继续重复检测。

 

本文参考了:Shell脚本监控程序运行情况

你可能感兴趣的:(其他,arm,linux,shell)