守护进程脚本

守护进程

读取配置文件的参数,根据参数去守护对应的进程,参数的设置可以由对应进程的启动脚本去更新参数;

守护脚本内容
#!/bin/bash

conf=./daemon.conf						#配置文件

if [ ! -d "/opt/ros/log/daemon/" ]; then
	mkdir /opt/ros/log/daemon/
fi
log=/opt/ros/log/daemon/daemon-`date "+%Y-%m-%d"`.log

app_num=0								#记录进程数
app_start=()							#进程启动脚本名
app=()									#进程名
app_status=()							#进程是否需要守护状态,1:守护,0:不守护

cat /dev/null > $conf					#清空配置文件
echo `date "+%Y-%m-%d %H:%M:%S.%4N"` "daemon start" >> $log

#读取配置文件的参数
read_conf()
{
	app_num=0
	while read line
	do
		app_start[$app_num]=`echo $line | awk -F ':' '{print $1}'`
		app[$app_num]=`echo $line | awk -F ':' '{print $2}' | awk -F '=' '{print $1}'`
		app_status[$app_num]=`echo $line | awk -F '=' '{print $2}'`
		#echo "${app_start[$app_num]}:${app[$app_num]}=${app_status[$app_num]}"
		((app_num++))
	done < $conf
}

#守护进程
while true 
do
	sleep 3
	read_conf
	
	for((i=0;i<$app_num;i++))
	do
		#不需要守护的跳过
		if [ ${app_status[$i]} != 1 ];then
			continue
		fi
		
		#需要守护的进行判断守护
		ps_num=`ps aux | grep -w $app | grep -v grep |wc -l`
		if [ "${ps_num}" -lt "1" ];then
			echo `date "+%Y-%m-%d %H:%M:%S.%4N"` "The ${app[$i]} process has not been found, now run it" >> $log
			./${app_start[$i]} start
		elif [ "${ps_num}" -gt "1" ];then
			echo `date "+%Y-%m-%d %H:%M:%S.%4N"` "more than 1 ${app[$i]}, killall ${app[$i]}" >> $log
			./${app_start[$i]} stop
			sleep 0.1
			./${app_start[$i]} start
		fi
	done
done
配置文件参数格式

进程启动脚本名字:进程应用名字=守护状态(1需要守护,0不需要守护)
例:

S10-zhi:zhi=1
S11-cary:cary=0

启动脚本

用启动脚本开启进程,与守护进程脚本配合使用,可扩展性好

#!/bin/bash

conf=./daemon.conf						#配置文件

enable=1								#守护进程开启
disable=0								#守护进程关闭

app=workstation							#进程名
#app_start								#进程启动脚本名

#更新守护进程配置文件参数
write_conf()
{
	while read line
	do
		tmp=`echo $line | awk -F ':' '{print $2}' | awk -F '=' '{print $1}'`
		if [ $tmp = $app ];then
			break
		fi
	done < $conf
	
	app_start=S`echo $0 | awk -F "/S" '{print $2}'`					#进程启动脚本名
	if [ "$tmp" != "$app" ];then									
		echo "$app_start:$app=$1" >> $conf							#没有参数,追加参数
	else
		sed -i s/.*$app_start:$app=.*/$app_start:$app=$1/g $conf	#有参数替换参数
	fi
}

case "$1" in
	start)
		$app &
		sleep 0.1
		write_conf $enable
		echo "$app start"
		;;
	stop)
		write_conf $disable
		sleep 0.1
		killall -9 $app
		echo "$app stop"
		;;
	restart)
		killall -9 $app
		$app &
		sleep 0.1
		write_conf $enable
		echo "$app restart"
		;;
	*)
		exit 1
esac
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值