工作中常常会遇到处理消息队列的消费者进程,这样的进程是一个守护进程,即一个服务。服务通常写个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中加入 定时重启任务

shell脚本(管理守护进程)的更多相关文章

  1. linux使用shell脚本停止java进程

    使用shell脚本停止java进程,过程就是先查出对应的java进程pid,然后kill掉 - | 其中xxx是对应进程的关键词(即从查出的所有java进程中分辨出目标进程)

  2. shell脚本--监控java进程存活脚本

    #!/bin/bash base_dir=/opt war_processor="tomcat" jar_processor="manager-server.jar pl ...

  3. Shell脚本管理

    sh test.sh../test.sh与source test.sh.. test.sh执行命令的区别:sh是启用子shell执行而source或点是在当前窗口执行export A=123:定义全局 ...

  4. shell脚本执行查找进程,然后查杀进程

    shell 执行查找进程,然后查杀进程脚本如下: ps -ef | grep 'IOE' |grep -v 'grep'| awk '{print \$2}' |while read pid; do ...

  5. Shell脚本检查memcache进程并自己主动重新启动

    修正版: #!/bin/sh #check memcache process and restart if down mm_bin="/usr/local/bin/memcached&quo ...

  6. Shell脚本中让进程休眠的方法(sleep用法)

    有时候写Shell的脚本,用于顺序执行一系列的程序. 有些程序在停止之后并没能立即退出,就例如有一个 tomcat 挂了,就算是用 kill -9 命令也还没瞬间就结束掉. 这么如果 shell 还没 ...

  7. shell脚本杀掉指定进程下所有子进程(包括子进程的子进程)

    搜索了网上好像并没有杀掉指定进程下所有子进程(包括子进程的子进程)的脚本,自己琢磨写了一版,虽说比较简单,但希望分享大家,帮助需要的人 #!/bin/sh # 递归找到进程最底层子进程并杀除. mai ...

  8. shell脚本中判断进程是否存在

    #! /bin/bash PROC_NAME=docker ProcNumber=`ps -ef |grep -w $PROC_NAME|grep -v grep|wc -l` ];then echo ...

  9. shell脚本批量杀死进程

    使用Ubuntu系统时常会遇到机器卡死的情况(人生最大的痛苦),所有的键都没有用,只好强制关机,我似乎对此已经'乐此不疲了'. 看到又神牛说: 可以在tty里面把相关的进程杀死,之后就正常.(到目前我 ...

随机推荐

  1. 修改WebBrowser控件的内核解决方案

    方法一 加入你想让WebBrowser控件的渲染模式编程IE8的标准模式, 你可以通过设置注册表FEATURE_BROWSER_EMULATION 来实现. 示例: 注册表中注明当前本机装的IE版本H ...

  2. 学习ASP.NET MVC(三)——我的第一个ASP.NET MVC 视图

    今天我将对前一篇文章中的示例进行修改,前一篇文章中并没有用到视图,这次将用到视图.对于前一个示例中的HelloWorldController类进行修改,使用视图模板文件生成HTML响应给浏览器. 一. ...

  3. Vector和Stack源码分析/List集合的总结

    序言 这篇文章算是在这list接口下的集合的最后一篇了,前面ArrayList.LinkedList都已经讲解完了,剩下就Vector和Vector的子类Stack啦.继续努力.一步一个脚印, --W ...

  4. rabbitMQ第四篇:远程调用

    前言:前面我们讲解的都是本地服务器,现在如果需要远程计算机上运行一个函数,等待结果.这就是一个不同的故事了,这种模式通常被称为远程过程调用或者RPC. 本章教程我们使用RabbitMQ搭建一个RPC系 ...

  5. 《BI那点儿事》数据挖掘各类算法——准确性验证

    准确性验证示例1:——基于三国志11数据库 数据准备: 挖掘模型:依次为:Naive Bayes 算法.聚类分析算法.决策树算法.神经网络算法.逻辑回归算法.关联算法提升图: 依次排名为: 1. 神经 ...

  6. SharePoint Server 2013开发之旅(一):新的开发平台和典型开发场景介绍

    我终于开始写这个系列文章,实际上确实有一段时间没有动笔了.最近重新安装了一套SharePoint Server 2013的环境,计划利用工作之余的时间为大家写一点新的东西. SharePoint Se ...

  7. JavaScript垃圾回收(二)——垃圾回收算法

    一.引用计数(Reference Counting)算法 Internet Explorer 8以下的DOM和BOM使用COM组件所以是引用计数来为DOM对象处理内存,引用计数的含义是跟踪记录每个值被 ...

  8. Android之自定义ListView(一)

    PS:自定义View是Android中高手进阶的路线.因此我也打算一步一步的学习.看了鸿洋和郭霖这两位大牛的博客,决定一步一步的学习,循序渐进. 学习内容: 1.自定义View实现ListView的I ...

  9. ElasticSearch 配置详解

    配置文件位于es根目录的config目录下面,有elasticsearch.yml和logging.yml两个配置,主配置文件是elasticsearch.yml,日志配置文件是logging.yml ...

  10. zTree的使用2

    前台代码: @using Models; @{ Layout = "~/Views/Shared/_Layout.cshtml"; } <link type="te ...