(2)Nginx之基础命令,版本更新,定时任务

490 阅读1分钟

帮助: -? -h
使用指定的配置文件: -c
指定配置指令: -g
指定运行目录: -p
发送信号: -s [
      立即停止服务: stop
      优雅停止: quit
      重载配置文件: reload
      重新记录日志文件: reopen
]
测试配置文件是否有错误: -t -T
打印nginx版本信息,编译信息: -v -V


一、如何优雅的更新nginx配置?

当你的项目用户量非常大时,你的后台服务就不能说停就停,然后每次停止服务去做更新,或者一些操作;

比如需要升级最新版本的nginx

按照之前Nginx之起步编译中的方法来编译出一个objs文件,然后使用下面的操作来进行备份,替换及重启nginx

1、进入编译后指定的--prefix的路径,找到二进制目录

$cp nginx nginx.old

2、将新编译的文件的objs/nginx二进制文件copy到/home/nginx/sbin目录下

$cp -r nginx /home/nginx/sbin -f 

3、使用ps命令查看当前nginx进程号

$ps -ef|grep nginx
$kill -USR2 PID号

这个时候使用ps命令查看nginx,其实已经新开了一个master进程,相当于新老进程同步进行,只是老的进程已经不再监听端口了,这里之后就需要再发送以下命令来关闭老的worker进程。

$kill -WINCH 老PID号

这里有个问题,为什么切换了新版本nginx关闭了老的worker进程,老的master进程却不关闭呢?

原因是你不能保证你的新版nginx一定没问题,这个进程号还可以接受reload命令使版本回退到老版本



二、日志切割,定时任务

$crontab -l

定时任务脚本如下

#!/bin/bash
LOGS_PATH = /home/nginx/logs/history
CURRENT_LOGS_PATH = /home/nginx/logs
YESTERDAY = $(date -d "yesterday" +%Y-%m-%d)
mv ${CURRENT_LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${CURRENT_LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
kill -USR1 $(cat /home/nginx/logs/nginx.pid)