IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx运维脚本分享 -> 正文阅读

[系统运维]Nginx运维脚本分享

Nginx运维脚本

1、介绍

nginx运维脚本,包含启动,停止,重启,重新加载配置,平滑升级,服务状态检查
使用方法:

  • 在脚本同级目录下新建nginxPath.txt文件,输入nginx运行目录,如:/home/jiang/resty/bin/nginx
  • 执行sh control.sh start启动nginx

2、源代码

脚本名control.sh

#!/bin/bash

ACTION=$1
curr_dir=$(cd "$(dirname "$0")" || exit; pwd)  # 当前脚本所在目录
nginx_path=$(cat "${curr_dir}"/nginxPath.txt)  # nginx运行目录
pid_file="${nginx_path}/logs/nginx.pid"


# 服务状态检查
function check()
{
    local ok=0

    # 1、master进程数检查
    master_count=$(ps -ef | grep -v grep | grep -c "master process" )
    if (( master_count > 1 )); then
        echo "[check] Error, master count is more than one!"
        ok=1
    elif (( master_count > 1 )); then
        echo "[check] Error, master count is more than one!"
        ok=1
    else
        echo "[check] OK, The process is running normally!"
    fi

    # 2、pid文件检查
    if [ -f "$pid_file" ]; then
        pid=$(cat "${pid_file}")
        master_pid=$(ps -ef | grep -v grep | grep "master process" | awk '{print $2}')
        if [ "y${pid}" == "y${master_pid}" ]; then
            echo "[check] OK, Pid file no problem!"
        else
            echo "[check] Error, Pid file not correct!"
            ok=1
        fi
    else
        echo "[check] Error, Pid file does not exist!"
        ok=1
    fi

    # 3、定时任务检查
    echo "[check] OK, Timer task ok!"  # 暂未添加定时任务

    return "${ok}"
}


# 启动服务
function start()
{
    master_count=$(ps -ef | grep -v grep | grep -c "master process" )
    if (( master_count >= 1 )); then
        echo "[start] OK, nginx is alredy running, nothing to do!"
        return 1
    fi

    "${nginx_path}"/sbin/nginx -t  # 测试配置文件
    if [ $? != 0 ]; then  # 配置文件语法错误
        echo "[start] Error, Nginx conf file test error!!!!!!"
        return 1
    fi

    "${nginx_path}"/sbin/nginx     # 启动nginx
    sleep 0.5
    master_count=$(ps -ef | grep -v grep | grep -c "master process" )
    if (( master_count != 1 )); then
        echo "[start] Error, Conf ok but master process start failed!!!!!!"
        return 1
    fi

    ps -ef | grep nginx
    echo "[start] OK"

    return 0
}


# 停止服务
function stop()
{
    nginx_count=$(ps -ef | grep -v grep | grep -c "nginx:" )
    if (( nginx_count == 0 )); then  # 已经停止运行了,退出
        echo "[stop] OK, nginx has stopped, nothing to do!"
        return 1
    fi

    "${nginx_path}"/sbin/nginx -s stop
    sleep 0.5
    nginx_count=$(ps -ef | grep -v grep | grep -c "nginx:" )
    if (( nginx_count != 0 )); then
        echo "[stop] Error, stop failed!"  # stop失败
        return 1
    fi

    echo "[stop] OK"
    return 0
}


# 平滑升级
function update()
{
    if [ ! -f "$pid_file" ]; then
        echo "[update] Error, Pid file does not exist!!!!!!"
        return 1
    fi

    master_count=$(ps -ef | grep -v grep | grep -c "master process" )
    if (( master_count != 1 )); then
        echo "[update] Error, Master count does not equal 1 !!!!!!"
        return 1
    fi

    pid=$(cat "${pid_file}")
    
    kill -USR2 "${pid}"    # 自动拉起一组新进程(master和worker)
    sleep 0.5                # 此处有待优化,应该循环等待master进程数为2,然后往下执行
    kill -WINCH "${pid}"   # 老worker进程退出
    kill -QUIT "${pid}"    # master进程退出
    
    echo "[update] OK"
    check
    return $?
}


# 脚本使用方法
function usage()
{
    echo ""
    echo "=============control 脚本使用方法============="
    echo " 1、启动服务         sh control.sh start"
    echo " 2、停止服务         sh control.sh stop"
    echo " 3、重启服务         sh control.sh restart"
    echo " 4、重新加载配置文件 sh control.sh reload"
    echo " 5、服务平滑升级     sh control.sh update"
    echo " 6、服务状态检测     sh control.sh check"
    echo " 7、脚本使用方法     sh control.sh usage"
    echo "============================================="
    echo ""
}


# 入口函数
function main() 
{
    case "${ACTION}" in
        start)
            start    # 启动
        ;;
        stop)
            stop     # 停止
        ;;
        restart)
            stop     # 重启
            start
        ;;
        reload)
            start    # 重新加载配置文件
            stop
        ;;
        update)
            update   # 平滑升级
        ;;
        check)
            check    # 服务状态检查
        ;;
        *)
            usage    # 参数错误
        ;;
    esac

    exit $?
}


main "$@"

  • 定时任务检查功能尚未完善,后面慢慢更新。。。
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 13:09:20  更:2022-05-09 13:13:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:46:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码