启动

格式:./nginx -s reload

  • reload:重载配置文件,不会丢失请求
  • stop:立刻停止
  • Quit:优雅的停止
  • Reopen:重新记录日志文件
  • -t:检查配置文件是否正确

重新编译

在解压后的目录下,我们可以查看将要被安装的模块

  • cat auto/options | grep YES

或者在sbin下,查看自定义安装的模块

  • ./nginx -V

比如我想添加http_v2_module模块:
1.在源码路径下重新编译

  • ./configure —prefix=/home/jw/nginx —with-http_v2_module [—原本就有的模块]

2.make ,(不要make install)

热部署

  1. 备份nginx:cp nginx nginx.old
    2. ./configure,将objs目录下的nginx执行文件cp到sbin下,cp后面加-f,否则提示busy
    3. 发信号,通知要进行热部署,kill -USR2 25512
    image.png
    4. 发信号,让老的work优雅的退出,kill -WINCH 25512,当老版本没有worker,说明所有的request都切换到新版本中了
    image.png

日志切割

  1. 备份 mv access.log access_20180503.log
    2. ./nginx -s reopen
    image.png
    实际使用:写个定时脚本,执行上述两条命令

python2.7

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import os, sys, datetime,re
  4. # nginx日志存放的路径
  5. nginxLogPath="/home/jw/nginx/logs/"
  6. # 获取昨天的日期
  7. yesterday = (datetime.date.today() + datetime.timedelta(days = -1)).strftime("%Y-%m-%d")
  8. # nginx启动的pid文件
  9. PID = "/home/jw/nginx/logs/nginx.pid"
  10. def cutNginxLog(path):
  11. logList = os.listdir(path) # 判断传入的path是否是目录
  12. for logName in logList: # 循环处理目录里面的文件
  13. suffix = os.path.splitext(logName)[1]
  14. if suffix == ".log":
  15. # 分割日志
  16. re_Num = re.compile(r'^[a-zA-Z]')
  17. # 判断日志文件是否是字母开头(要切割的error.log或access.log),如果是日期开头就不切割
  18. if re_Num.search(logName):
  19. logNewName = yesterday + "_" + logName # 新日志文件名称列如:2018-11-8_access.log
  20. oldLogPath = os.path.join(path, logName) # 旧日志文件绝对路径
  21. newLogPath = os.path.join(path, logNewName) # 新日志文件绝对路径
  22. os.rename(oldLogPath, newLogPath)
  23. cmd = " kill -USR1 `cat %s` "% PID
  24. res = os.system(cmd)
  25. if res != 0:
  26. return "重新加载nginx失败"
  27. cutNginxLog(nginxLogPath)

shell

  1. #!/bin/bash
  2. #设置日志文件存放目录
  3. #LOG_HOME="/home/wwwlogs/"
  4. LOG_HOME="/usr/local/nginx/logs"
  5. #备分文件名称
  6. LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".access.log
  7. #重命名日志文件
  8. mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}
  9. #向nginx主进程发信号重新打开日志
  10. kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
  11. # crontab -e
  12. */1 * * * * /opt/nginx/nginx_log.sh

计划任务

  1. 每天凌晨00:00定时执行这个脚本:
  2. * * * * *:分
  3. crontab -e
  4. 00 00 * * * /home/jw/nginx/logs/logCut.py

image.png

日志删除

shell

  1. # touch auto-del-7-day-ago-log.sh
  2. # chmod +x auto-del-7-day-ago-log.sh
  3. # vim auto-del-7-day-ago-log.sh
  4. find /www/cookie.com/log.cookie.com/ -mtime +7 -name "push*.log" -exec rm -rf {} \;
  5. # crontab -e
  6. 10 0 * * * /opt/sh/auto-del-7-day-ago-log.sh > /dev/null 2>&1