为了在Linux系统上定期清理Nginx日志,可以使用cron定时任务来自动执行日志清理脚本。以下是详细步骤:
1. 创建日志清理脚本
首先,创建一个脚本,用于归档和清理旧的Nginx日志。例如,将其命名为
/usr/local/bin/cleanup_nginx_logs.sh
#!/bin/bash# Directory where Nginx logs are stored
LOG_DIR="/var/log/nginx"
# Number of days to keep logs
DAYS_TO_KEEP=30
# Archive directory
ARCHIVE_DIR="/var/log/nginx/archive"# Create archive directory if it doesn't exist
mkdir -p $ARCHIVE_DIR# Find and move old log files to the archive directory
find $LOG_DIR -type f -name '*.log' -mtime +$DAYS_TO_KEEP -exec mv {} $ARCHIVE_DIR \;# Compress archived logs
find $ARCHIVE_DIR -type f -name '*.log' -exec gzip {} \;# Remove compressed logs older than DAYS_TO_KEEP
find $ARCHIVE_DIR -type f -name '*.gz' -mtime +$DAYS_TO_KEEP -exec rm {} \;# Reload Nginx to reopen log files
systemctl reload nginx
2. 赋予脚本执行权限
确保脚本是可执行的:
sudo chmod +x /usr/local/bin/cleanup_nginx_logs.sh
3. 创建Cron定时任务
编辑crontab文件,设置定时任务。例如,每天凌晨2点执行日志清理脚本:
sudo crontab -e
在crontab文件中添加以下行:
0 2 * * * /usr/local/bin/cleanup_nginx_logs.sh > /dev/null 2>&1
这行代码的含义是每天凌晨2点运行cleanup_nginx_logs.sh
脚本,并将输出重定向到/dev/null
(即不保存输出)。
4. 检查Nginx日志轮转配置(可选)
如果你更倾向于使用logrotate来管理Nginx日志,可以编辑或创建一个Nginx logrotate配置文件。
编辑或创建文件/etc/logrotate.d/nginx
:
sudo nano /etc/logrotate.d/nginx
添加以下配置:
/var/log/nginx/*.log {dailymissingokrotate 30compressdelaycompressnotifemptycreate 0640 www-data admsharedscriptspostrotate[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`endscript
}
这段配置会每天轮转Nginx日志,保留30天的日志,压缩旧日志,并在日志轮转后通知Nginx重新打开日志文件。
总结
通过上述步骤,你可以在Linux系统上定期清理Nginx日志,确保日志文件不会占用过多磁盘空间。你可以选择手动编写脚本并使用cron定时任务,或者使用logrotate进行日志轮转和清理。