工作中常常会遇到处理消息队列的消费者进程,这样的进程是一个守护进程,即一个服务。服务通常写个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. javascript_core_06之正则、Math、Date

    1.RegExp:Regular Expression,创建封装正则表达式: ①正则直接量:var reg=/reg/ig:②var reg=new RegExp(“reg”,“ig”): 2.Reg ...

  2. php使用正则过滤js脚本代码实例

    匹配的规则不能用 "/<script.*<\/script>/i",因为它不能匹配到换行符,那么多行js就匹配不掉了. 要用 "/<script[ ...

  3. SQLServer清空数据库中所有的表并且ID自动归0

    exec sp_MSforeachtable 'Truncate Table ?'

  4. TypeScript实例

    interface Person { firstName: string, lastName: string } function greeter(person: Person) { return p ...

  5. 25.按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有

    package zhongqiuzuoye; //自己写的方法 public class Rect { public double width; public double height; Rect( ...

  6. chrome开发总结(交互/权限/存储)-爬虫

    chrome开发总结(交互/权限/存储)-爬虫 [TOC] 标签(空格分隔): 杂乱之地 经过一翻折腾.还是选择了chrome来做爬虫.主要是为了解决一些ajax加载的问题以及代理的问题. 1.chr ...

  7. 解决h5的video标签,android、ipad客户端播放正常,iphone客户端无法播放

    在做html5时插入一个视频播放标签video后,测试时android.ipad客户端播放正常,唯独iphone自带浏览器无法播放. 解决办法: 判断用户所使用客户端访问h5页面时是iphone时,点 ...

  8. js选择目录

    找了好久,终于找到了! function browseFolder(path) {//打开本地目录(目录选择功能) try { var Message = "\u8bf7\u9009\u62 ...

  9. java中异常注意问题(发生在多态是的异常问题)

    /* 异常的注意事项: 1,子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类. 2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集. 简单说:子类 ...

  10. PHP的学习--可变函数

    PHP 支持可变函数的概念.这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它.可变函数可以用来实现包括回调函数,函数表在内的一些用途. 可变函数不能用于例如 ech ...