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中加入 定時重啟任務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM