linux shell 任务管理监控脚本

#!/usr/bin/env bash

# 系统守护进程管理脚本 [PHP]

# 获得 PHP 的位置
PHP=/usr/local/php

if [ ! -f $PHP ] ; then
    PHP=`which php`
fi

# 需要守护启动的脚本
COMMANDS=(
   "cli.php reward"         ##颁奖任务
   "cli.php table-log"      ## 同步牌局日志
   "cli.php statis"
   "cli.php chips-log"      ## 同步金币明细
   "cli.php report"         ## 数据统计报表
)

ACTION="@$1"
ROOT=$(cd "$(dirname "$0")"; cd ../; pwd)
LOGPATH=$ROOT/data/logs/`date +%Y%m%d`
LOGFILE=$LOGPATH/task-manager.log

if [ ! -d $LOGPATH ] ; then
    mkdir -p $LOGPATH
fi

service_start() {
    for ((i = 0; i < ${#COMMANDS[@]}; i++)) ; do
        PNAME=$ROOT/bin/${COMMANDS[$i]}
        PID=`ps -ef | grep cli.php | grep "$PNAME" | grep -v grep | awk '{print $2}'`
        if [ "$PID" ] ; then
            echo -e "$PNAME\t\033[33;49;2m[ 运行中 ]\033[39;49;0m"
        else
            $PHP $PNAME > /dev/null &
            if [ $? -eq 0 ];then
                echo -e "$PNAME\t\033[32;49;2m[ 已启动 ]\033[39;49;0m"
                echo -e "$(date +'%Y-%m-%d %H:%M:%S') [START] $PNAME" >> $LOGFILE
            else
                echo -e "\033[31m [启动失败] \033[0m"
            fi

        fi
    done
}

service_stop() {
    for ((i = 0; i < ${#COMMANDS[@]}; i++)) ; do
        PNAME=$ROOT/bin/${COMMANDS[$i]}
        PID=`ps -ef | grep cli.php | grep "$PNAME" | grep -v grep | awk '{print $2}'`
        if [ "$PID" ] ; then
            kill -9 $PID
            echo -e "$PNAME\t\033[31;49;2m[ 已停止 ] \033[39;49;0m"
            echo -e "$(date +'%Y-%m-%d %H:%M:%S') [STOP] $PNAME" >> $LOGFILE
        else
            echo -e "$PNAME\t\033[37;49;2m[ 未运行 ]\033[39;49;0m"
        fi
    done
}

service_status() {
    for ((i = 0; i < ${#COMMANDS[@]}; i++)) ; do
        PNAME=$ROOT/bin/${COMMANDS[$i]}
        PID=`ps -ef | grep cli.php | grep "$PNAME" | grep -v grep | awk '{print $2}'`
        if [ "$PID" ] ; then
            echo -e "$PNAME\t\033[33;49;2m[ 运行中 ]\033[39;49;0m"
        else
            echo -e "$PNAME\t\033[37;49;2m[ 未运行 ]\033[39;49;0m"
        fi
    done
}

# 检查死掉的进程,并重启
if [ $ACTION = "@start" ] ; then
    service_start

# 停止所有 CLI 进程
elif [ $ACTION = "@stop" ] ; then
    service_stop

# 重启所有进程
elif [ $ACTION = '@restart' ] ; then
    service_stop
    service_start

# 显示当前运行状态
elif [ $ACTION = '@status' ] ; then
    service_status

# 显示所有当前状态
else
    STATS=`ps aux | grep service | grep "cli.php" | grep -v grep`
    if [ "$STATS" ] ; then
        echo "当前进程状况:"
        echo "$STATS"
    fi
    echo "使用命令:$0 [start|stop|restart|status]"
fi

posted @ 2018-01-08 15:58  六飞.卡尔  阅读(418)  评论(0)    收藏  举报