一、问题描述:
监控指定程序是否运行,如果程序没有运行,那么启动程序。
二、解决思路:
<1>、我们判断一个程序是否运行,可以通过查看该程序的进程信息来判断。
例: 判断程序 01FirstScript.sh 是否在运行
命令:ps -ef | grep 01FirstScript.sh | grep -v grep
结果分析: 如果命令执行之后有输出,即输出进程信息。则说明程序正在运行
如果执行之后没有输出,则说明程序没有运行
<2>、如何监控指定的程序?
我们可以将指定程序的名字作为监控程序的参数传递进去,在内部实现时,通过死循环来不断监控
<3>、如果程序未运行,如何启动程序?
在判断程序为运行时,如果指定程序名是监控程序的第一个参数。可以通过下面命令启动指定程序
sh $1
三、脚本代码实现:
#!/bin/bash
#进程监控脚本
#功能需求: 监控程序是否运行,如果程序没有运行,那么启动程序。
while [ true ]
do
pro=$(ps -ef | grep "$1" | grep -v grep | grep -v "$0")
#过滤出目标进程信息,如果pro为空串说明目标进程未运行
#反向过滤掉grep进程 和 本进程信息, 因为这两个进程信息中包含目标进程的名字
if [ -z "$pro" ]
then
echo "程序未启动,重新启动程序"
sh $1 #重新启动指定程序
else
echo "程序正在运行..."
fi
sleep 0.5
done