日志切割
nginx的日志文件没有rotate功能 编写每天生成一个日志,我们可以写一个nginx日志切割脚本来自动切割日志文件
第一步就是重命名日志文件 (不用担心重命名后nginx找不到日志文件而丢失日志。在你未 重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,Linux是靠文件描述 符而不是文件名定位文件 )
第二步向nginx主进程发送USR1信号
nginx主进程接到信号后会从配置文件中读取日志文件名称
重新打开日志文件 (以配置文件中的日志名称命名) ,并以工作进程的用户作为日志文件 的所有者 重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开 的日志文件
工作进程立刻打开新的日志文件并关闭重名名的日志文件 然后你就可以处理旧的日志文件了。[或者重启nginx服务]
nginx日志按每分钟自动切割脚本如下 :
新建shell脚本:
vi /opt/nginx/nginx_log.sh
#!/bin/bash
#设置日志文件存放目录
#LOG_HOME="/home/wwwlogs/"
LOG_HOME="/usr/local/nginx/logs"
#备分文件名称
LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".access.log
#重命名日志文件
mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}
#向nginx主进程发信号重新打开日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
创建crontab设置作业
设置日志文件存放目录crontab -e
*/1 * * * * sh /opt/nginx/nginx_log.sh
记录我出现的问题:
在介绍问题之前,介绍一个命名,时刻查看当前正在执行的定时任务
tail -f /var/log/cron
问题1.引号(撇号)问题,导致 kill 关闭掉进程时出错
错误写法
kill -USR1 cat `/usr/local/nginx/logs/nginx.pid`
正确写法
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
问题2:权限问题
大家都知道,普通用户在重启nginx服务的时候,需要使用root超级用户权限
sudo service nginx restart
所以定时任务,需要切换到root用户使用root权限去执行定时任务
[root@vagrant-centos7 logs]# crontab -l
* * */1 * * sh /usr/local/nginx/logs/nginx_log.sh #一天生成一个日志文件
添加定时任务后需要重启crond 服务
[root@vagrant-centos7 logs]# service crond restart
Redirecting to /bin/systemctl restart crond.service