shell脚本(管理守护进程)

时间:2023-03-09 17:16:42
shell脚本(管理守护进程)

工作中常常会遇到处理消息队列的消费者进程,这样的进程是一个守护进程,即一个服务。服务通常写个shell脚本来管理,查询服务的status  ,启动start 关闭stop  重启reload。最近在学习shell,也模仿写了一个简单的服务管理脚本

首先贴出模拟的守护进程服务,PHP程序,命名demo.php

<?php
while(true){
echo 'doing...'.PHP_EOL;
sleep(10);
}
?>

  这是一个死循环,不停的输出。

管理的shell脚本如下

#!/bin/bash

DEMO_SCRIPT='/home/tianquanjun/study/service/demo.php' #服务脚本
DEMO_LOG='/home/tianquanjun/study/service/demo.log' #服务运行日志 #判断程序是否已经在运行
status_script(){
pids=`ps aux|grep /home/tianquanjun/study/service/demo.php|grep -v grep|awk '{print $2}'`
if [ ${pids} ]
then
echo ${0}'在运行中'
return 1
else
echo $0'未启动'
return 2
fi
} #启动脚本,先判断脚本是否已经在运行
start_script(){
status_script
if [ $? -eq 1 ]
then
echo ${0}' 已经在运行中了'
else
echo '启动'${0}'中...'
nohup /usr/bin/php ${DEMO_SCRIPT}>${DEMO_LOG} &
echo '启动完毕'
fi
} #停止脚本
stop_script(){
status_script
if [ $? -ne 1 ]
then
echo ${0}' 不是运行状态'
else
do
kill -TERM ${pid} >/dev/null 2>&1
done
echo '停止完毕'
fi
} #重启脚本
reload_script(){
stop_script
sleep 4
start_script
}
#入口函数
handle(){
case $1 in
start)
start_script
;;
stop)
stop_script
;;
status)
status_script
;;
reload)
reload_script
;;
*)
echo 'USAGE OF THIS SERVER IS '${0} 'status|start|stop|restart';
;;
esac
} if [ $# -eq 1 ]
then
handle $1
else
echo 'USAGE OF THIS SERVER IS '${0} 'status|start|stop|restart';
fi

  利用 ./demo.sh  status|start|stop|reload 来管理

由于守护进程容易死掉,所以我们也经常在ctontab中加入 定时重启任务