Linux系统下程序的自启动脚本keepshell

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值