• 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中加入 定时重启任务

  • 相关阅读:
    redis
    linux systemd
    分布式高可用架构演进
    c++ 多线程 信号量简单使用
    JAVA上传文件到FTP上
    JAVA字符串去掉html代码
    jQuery判断复选框是否勾选
    SpringBoot全局异常处理
    SpringBoot统一日志打印
    JAVA加解密之DES
  • 原文地址:https://www.cnblogs.com/taijun/p/5073833.html
Copyright © 2020-2023  润新知