工作中常常会遇到处理消息队列的消费者进程,这样的进程是一个守护进程,即一个服务。服务通常写个shell脚本来管理,查询服务的status ,启动start 关闭stop 重启reload。最近在学习shell,也模仿写了一个简单的服务管理脚本
首先贴出模拟的守护进程服务,PHP程序,命名demo.php
这是一个死循环,不停的输出。
管理的shell脚本如下
#!/bin/bashDEMO_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 $1else echo 'USAGE OF THIS SERVER IS '${0} 'status|start|stop|restart';fi
利用 ./demo.sh status|start|stop|reload 来管理
由于守护进程容易死掉,所以我们也经常在ctontab中加入 定时重启任务