1.作者背景
1.1 虽然一直用Windows系统听歌看电影查资料,但是我对Windows的系统脚本却是一知半解,可能和工作的着重点有关。
1.2 我大部分时间都是基于Linux系统下的开发,偶尔开发Windows服务。
2.功能说明
2.1 Linux系统下一切皆文件,shell脚本是Linux命令的集合(不懂Linux基本命令的先去补补吧),所以安装脚本和升级脚本是比较简单的,就不多说了;而keepshell脚本是一个进程,要循环检测某些程序是否启动,没启动就帮它启动,程序死了也帮它重启;下面直接给大家分享,为大家节省时间。
3.keepshell详细脚本
#!/bin/sh
# 程序目录定义
ProgramDir="/root/FAG/"
# 程序进程唯一,是指限定该脚本只有一个进程
program=$0
program=${program##*/}
#ps > keepshell.tmp 嵌入式系统使用,不支持-ef,效果一样
ps -ef > keepshell.tmp #服务器使用,不加-ef 就没用
#cmd=`cat keepshell.tmp | grep -v grep | grep -v "ps" | grep -v $$ | grep /$program` 嵌入式系统使用,不支持-ef,效果一样
cmd=`cat keepshell.tmp | grep -v grep | grep -v "ps -ef" | grep -v $$ | grep /$program | grep -v "sh -c"` #服务器使用,不加-ef 就没用
if [ "$cmd" = "" ]; then
echo "[$$]runing..."
rm -f keepshell.tmp
else
#echo "ps | grep -v grep | grep -v "ps" | grep -v $$ | grep /$program" 嵌入式系统使用,不支持-ef,效果一样
echo "ps -ef | grep -v grep | grep -v "ps" | grep -v $$ | grep /$program" #服务器使用,不加-ef 就没用
echo "$cmd"
echo "已有程序进程运行,退出:$$"
rm -f keepshell.tmp
exit -1
fi
guard()
{
#sn=`ps | grep $1 | grep -v grep | grep -v tail ` 嵌入式系统使用,不支持-ef,效果一样
sn=`ps -ef | grep $1 | grep -v grep | grep -v tail ` #服务器使用,不加-ef 就没用
if [ "$sn" = "" ]; then
if [ "$1" = "boa" ];then
boa
else
cd $ProgramDir
./$1 & #如果这样写有前台打印,影响其他操作,请改成 nohup ./$1 &
fi
echo "$1 restart at " $(date) >> /home/errorlog.log #程序重启日志写入/home/errorlog.log,方便定位
fi
}
while true
do
# keepshell程序列表 FAG boa ,这是重点,替换成自己的可执行程序
for var1 in FAG boa
do
guard $var1
done
sleep 5 #5秒钟循环检测,根据实际情况改
done
4.注意事项
4.1 执行前记得赋权限,chmod 777 keepshell。