Nginx守护进程

文件名:startNginxVue.sh

参数说明:

# 应用名(查进程关键字): APP_NAME=nginx
# 应用端口(健康监测用): APP_PORT=18206
 # 应用健康检查URL(健康检查):HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}/
 # 的绝对路径(进程检查):JARNAME=nginxr

使用方法:

启动: ./startNginxVue.sh start

停止: ./startNginxVue.sh stop

重启:./startNginxVue.sh restart

健康监测:./startNginxVue.sh  health

进程监测:./startNginxVue.sh pid

进程守卫(守护):./startNginxVue.sh guard

帮助:./startNginxVue.sh help

#!/bin/bash
 
# 应用名
APP_NAME=nginx_smart_school-vue
 
# 应用端口
APP_PORT=18206
 
# 应用健康检查URL
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}/
 
# jar所在的根目录
APP_HOME=/home/edu/linuxServer/Nginx/nginx-1.24.0
 
# jar的绝对路径
JARNAME=nginx_smart_school-vue
JAR_NAME=${APP_HOME}/sbin/${JARNAME}
 
#应用的启动日志
JAVA_OUT=${APP_HOME}/logs/start_${APP_NAME}_$(date "+%Y-%m-%d-%H").log
echo logfile=$JAVA_OUT

#
PID_OUT==${APP_HOME}/${APP_NAME}_${APP_PORT}_pid
 
PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20    # 等待应用启动的时间
 
# 创建出相关目录
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
    echo "Usage: $PROG_NAME { start | stop | restart | status | pid | health | guard | help }"
    exit 2
}
process_check(){
	P_PID=-1
	pid=$(ps -ef | grep ${APP_NAME} | grep ${JARNAME} | grep -v grep | grep -v crontab | grep -v monitor | awk '{print $2}')
	echo "${APP_NAME} ${JARNAME} pid is [${pid}]"
	if [ ! -n "$pid" ]; then
		#echo $pid
		echo "查找" ${APP_NAME}  ${JARNAME} "进程没有找到!!!返回-1"
		pid=-1
	fi
	#echo $pid 
	P_PID=$pid
	P_PID_COUNT=0
	P_PID_COUNT=$(ps -ef | grep ${APP_NAME} | grep  ${JARNAME} | grep -v grep | grep -v crontab | grep -v monitor | awk '{print $2}'| wc -l)
	echo "${APP_NAME} ${JARNAME} pid count = [${P_PID_COUNT}]"
	if [ $P_PID_COUNT -eq 0 ]; then
		echo "查找" ${APP_NAME}  ${JARNAME} "进程数量为"$P_PID_COUNT"!!!"
	fi
}
# 进程守卫
process_guard(){
	echo "守卫进程 process guard ... "
	process_check
	if [ $P_PID_COUNT -eq 0 ]; then
                echo "查找" ${APP_NAME}  ${JARNAME} "进程数量为"$P_PID_COUNT"!!!,现在立即启动进程。。。请稍后。。。"
		start
		sleep 5
		echo "启动完毕,再次检查进程。。。"
		process_check		
        fi
	if [ $P_PID_COUNT -gt 0 ]; then
		echo "running 进程运行中,无需再次启动. pid=${P_PID} pid_count=${P_PID_COUNT}"
	fi

}
#健康检查 
health_check() {
    #sleep 60
    exptime=0
    echo "checking ${HEALTH_CHECK_URL}"
    while true
        do
            status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code}  ${HEALTH_CHECK_URL}`
            if [ "$?" != "0" ]; then
               echo -n -e "\rapplication not started"
            else
                echo "code is $status_code"
                if [ "$status_code" == "200" ];then
                    break
                fi
            fi
            sleep 1
            ((exptime++))
 
            echo -e "\rWait app to pass health check: $exptime..."
 
            if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
                echo '[ERROR] [failed] app start failed'
               exit 1
            fi
        done
    echo "[OK] [success] check ${HEALTH_CHECK_URL} success"
}
#启动应用
start_application() {
    echo "starting ${APP_NAME} process"
    #nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 & 	
	${JAR_NAME}
    echo "started ${APP_NAME} process"
}
#重新加载重启应用
reload_application(){
echo "starting ${APP_NAME} process"
    #nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 & 	
	${JAR_NAME} -s reload
    echo "started ${APP_NAME} process"
}
#停止应用 
stop_application(){
echo "stoping ${APP_NAME} process"
    #nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 & 	
	${JAR_NAME} -s stop
    echo "stoped ${APP_NAME} process"
}
#强制杀掉进程
stopkill_application() {
   checkjavapid=`ps -ef | grep ${APP_NAME} | grep  ${JARNAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`   
   if [[ ! $checkjavapid ]];then
      echo -e "\rno ${APP_NAME} process"
      return
   fi
 
   echo "stop ${APP_NAME} process"
   times=60
   for e in $(seq 60)
   do
        sleep 1
        COSTTIME=$(($times - $e ))
        checkjavapid=`ps -ef | grep ${APP_NAME} | grep  ${JARNAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
        if [[ $checkjavapid ]];then
            kill -9 $checkjavapid
            echo -e  "\r        -- stopping java lasts `expr $COSTTIME` seconds."
        else
            echo -e "\rjava process has exited"
            break;
        fi
   done
   echo ""
}
#启动
start() {
    start_application
    echo -e "please wait...health checking..."
    #sleep 45
    #health_check
    process_check
}
#停止
stop() {
    stop_application
    process_check
}
#命令分流
case "$ACTION" in
    status)
	health_check
    ;;
    pid)
	process_check
    ;;
    guard)
	process_guard
    ;;
    start)
        start
    ;;
    stop)
        stop
    ;;
    kill)
	stopkill_application
    ;;
    restart)
        stop
        start
    ;;
    health)
	health_check
    ;;
    help)
	usage
    ;;
    *)
        usage
    ;;
esac

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DOCKER007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值