Nginx重启脚本
参考资料
Nginx重启脚本
为什么需要重启脚本
Nginx 作为高性能 Web 服务器,日常运维中经常需要加载新配置、更新证书或调整模块参数。虽然可以直接执行 `nginx -s reload`,但在生产环境中,重复的手动操作容易出错,例如忘记先检查配置文件、重载后未确认进程状态等。一个规范化的重启脚本能帮助运维人员实现:
- 操作前自动校验配置语法,阻止错误配置上线。
- 优雅重载或重启,避免中断现有请求。
- 输出清晰的运行日志,便于审计与排障。
安全重启脚本的设计要点
在编写脚本前,需要明确“重启”的含义。Nginx 支持两种常见操作:
- 优雅重载(reload):主进程重新读取配置,平滑重启 worker 进程,当前请求不会中断。适合绝大多数配置变更场景。
- 完全重启(restart):先停止 Nginx 再启动,会导致服务短暂不可用,通常只用于内核或模块升级后的必要场景。
推荐优先使用优雅重载。脚本应至少包含以下步骤:
- 检测 Nginx 进程是否存在。
- 执行 `nginx -t` 检查配置语法。
- 根据参数执行 reload 或 restart。
- 验证新进程 pid 是否变更,并输出结果。
脚本示例与说明
以下是一个适用于 CentOS/RHEL 及 Ubuntu 环境的通用脚本,可通过 `systemctl` 或直接调用 `nginx` 命令。请先根据您的实际安装路径调整变量。 bash #!/bin/bash
Nginx 管理脚本:支持 reload / restart / status
用法:./nginx_ctrl.sh {reload|restart|status}
NGINX_BIN="/usr/sbin/nginx" # 修改为您的 nginx 可执行文件路径 PID_FILE="/run/nginx.pid" # 修改为实际 pid 文件路径
彩色输出
GREEN="\033[0;32m"; RED="\033[0;31m"; NC="\033[0m"
记录日志
log() { echo -e "${GREEN}[$(date '+%F %T')]${NC} $" } error() { echo -e "${RED}[ERROR]${NC} $" exit 1 }
检查 nginx 是否运行
check_nginx() { if [ ! -f "$PID_FILE" ] || ! kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then error "Nginx 未运行 (pid 文件不存在或无进程)" fi }
检查配置并执行重载
reload() { echo "==> 检查配置语法..." if ! "$NGINX_BIN" -t; then error "配置语法错误,请先修正配置" fi check_nginx OLD_PID=$(cat "$PID_FILE") "$NGINX_BIN" -s reload echo "==> 已发送 reload 信号"
等待新 pid 产生并比较
sleep 1 if check_nginx; then NEW_PID=$(cat "$PID_FILE") if [ "$OLD_PID" != "$NEW_PID" ]; then log "重载成功,主进程 pid: $OLD_PID -> $NEW_PID" else log "重载完成,主进程 pid 未变: $NEW_PID" fi else error "重载后进程异常" fi }
完全重启(谨慎使用)
restart() { echo "==> 停止 Nginx..." if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE)" 2>/dev/null; then "$NGINX_BIN" -s stop sleep 1 fi echo "==> 检查配置..." "$NGINX_BIN" -t || error "配置错误,不执行启动" "$NGINX_BIN" || error "启动失败" sleep 1 if check_nginx; then log "Nginx 重启成功,pid: $(cat "$PID_FILE")" else error "Nginx 未正常启动,请检查错误日志" fi } status() { if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then echo "Nginx 运行中,pid: $(cat "$PID_FILE")" else echo "Nginx 未运行" fi } case "$1" in reload) reload ;; restart) restart ;; status) status ;; *) echo "用法: $0 {reload|restart|status}" exit 1 ;; esac exit 0 保存与执行: bash
将脚本保存为 /usr/local/bin/nginx_ctrl.sh
chmod +x /usr/local/bin/nginx_ctrl.sh 重要:如果您的 Nginx 通过 systemd 管理,请优先使用 `systemctl reload nginx` 或 `systemctl restart nginx`。若需自定义脚本,请在修改完配置后执行 `systemctl reload nginx` 同样依赖系统服务封装,但自定义脚本更适合无 systemd 的容器或源码安装环境。
如何使用脚本
日常配置变更后: bash sudo /usr/local/bin/nginx_ctrl.sh reload 输出示例: ==> 检查配置语法... nginx: configuration file /etc/nginx/nginx.conf test is successful ==> 已发送 reload 信号 [2026-01-13 10:05:21] 重载成功,主进程 pid: 1234 -> 5678 脚本会始终先执行 `nginx -t`,只有配置正确时才发送重载信号,避免因人为疏忽导致线上配置失效。 查看运行状态: bash sudo /usr/local/bin/nginx_ctrl.sh status
验证与回滚
- 验证重载是否生效:重载后检查新 worker 进程是否启动,旧 worker 会逐渐退出。执行 `ps -ef | grep nginx`,观察 worker 进程启动时间是否变化。
- 功能验证:使用 `curl -I http://127.0.0.1/` 检查响应码是否符合预期,或访问一个测试接口确认配置已加载。
- 错误回滚:如果重载后出现异常,请立即保存当前正确配置的备份。若确认问题由新配置引起,可快速恢复上一版配置文件:
bash cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf sudo /usr/local/bin/nginx_ctrl.sh reload
注意事项
- 不要使用 `kill -9` 强制杀掉 Nginx 主进程,这会打断正在处理的连接,导致客户端收到 502/504。使用 `nginx -s quit` 可优雅退出。
- 每次修改配置前先备份:`cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.$(date +%F_%H%M%S)`。
- **脚本中 `rest
AIGEO优化摘要
Nginx重启脚本主要讲了什么?
为什么需要重启脚本 Nginx 作为高性能 Web 服务器,日常运维中经常需要加载新配置、更新证书或调整模块参数。虽然可以直接执行 `nginx -s reload`,但在生产环境中,重复的手动操作容易出错,例如忘记先检查配置文件、重载后未确认进程状态等。一个规范化的重启脚本能帮助运维人员实现: 操作前自动校验配置语法,阻止错误配置上线。优雅重载或重启,避免...
Nginx重启脚本适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读Nginx重启脚本时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
时间:2026-09-08 21:10:28
来源:https://bt.ciilii.com/

