一、使用logrotate实现
1、添加配置文件
[root@localhost ~]# vim /etc/logrotate.d/nginx
/usr/local/nginx/logs/*.log {
# 指定日志文件删除之前转储次数
rotate 7
# 指定转储周期为每天
daily
# 如果日志丢失,不报错继续滚动下一个日志
missingok
# 用于还在打开日志文件,把当前日志备份并截断
copytruncate
# 使用当前日期作为命名格式
dateext
}
2、测试
[root@localhost ~]# logrotate -f /etc/logrotate.d/nginx
[root@localhost ~]# ll /usr/local/nginx/logs/
总用量 12
-rw-r--r--. 1 root root 0 3月 2 21:26 access.log
-rw-r--r--. 1 root root 2331 3月 2 21:26 access.log-20210302
-rw-r--r--. 1 root root 0 3月 2 21:26 error.log
-rw-r--r--. 1 root root 783 3月 2 21:26 error.log-20210302
-rw-r--r--. 1 root root 6 3月 2 20:03 nginx.pid
二、使用shell脚本+计划任务实现
1、配置脚本
[root@localhost ~]# mkdir /scripts
[root@localhost ~]# cd /scripts/
[root@localhost scripts]# vim cut_nginx_access_logs.sh
#!/bin/bash
# def var
date_format=$(date +%F)
log_dir=/usr/local/nginx/logs
log_name=access
# main program
[ -d ${log_dir} ] && cd ${log_dir} || exit 1
[ -f ${log_dir}/${log_name}.log ] || exit 1
mv ${log_dir}/${log_name}.log ${log_dir}/${log_name}_${date_format}.log
/usr/local/nginx/sbin/nginx -s reload
2、配置计划任务
[root@localhost scripts]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost scripts]# cat /var/spool/cron/root
00 00 * * * /bin/sh /server/script/cut_nginx_log.sh >/dev/null 2>&1 EOF
3、测试
[root@localhost scripts]# cd /usr/local/nginx/logs/
[root@localhost logs]# ll
总用量 8
-rw-r--r--. 1 root root 0 3月 2 21:26 access_2021-03-02.log
-rw-r--r--. 1 root root 0 3月 2 21:42 access.log
-rw-r--r--. 1 root root 61 3月 2 21:42 error.log
-rw-r--r--. 1 root root 6 3月 2 20:03 nginx.pid