Nginx的access.log被删除在不影响应用的情况下能够恢复日志功能
一. 重建日志文件并设置权限
- 创建空的日志文件:
touch /var/log/nginx/access.log # 根据实际路径调整
- 确包文件权限正确:
# 查看 nginx 运行用户
ps aux | grep nginx | grep -v grep # 例如查询出来是 root
# 修改文件所有者和权限
chown root:root /var/nginx/access.log # 用户:组
chown 640 /var/log/nginx/access.log # 读写权限
二、让 Nginx 重新加载日志配置(关键步骤)
让 Nginx 主进程发送 USR1 信号,触发日志文件重新打开:
# 方法1: 通过 PID 文件发送信号
kill -USR1 $(cat /var/run/nginx.pid) # 根据实际 PID 文件路径调整
# 方法2:使用 Nginx 命令行(效果相同)
nginx -s reopen
原理:USR1 信号会让 Nginx 主进程通知工作进程关闭旧的日志文件句柄,并重新打开新创建的文件,从而恢复日志记录。
三、验证日志是否恢复
- 检查 Nginx 状态:
systemctl status nginx # 确保服务正常运行
- 触发新请求并查看日志:
# 触发一次请求(例如刷新网页或使用 curl)
curl http://localhost
# 查看日志文件是否有新记录
tail -f /var/log/nginx/access.log
四、长期解决方案:配置日志轮转
为避免手动删除日志导致问题,建议配置 logrotate 定期切割日志:
- 创建配置文件:
sudo vi /etc/logrotate.d/nginx
- 添加以下内容:
/var/log/nginx/*.log {
daily # 每天切割
missingok # 日志不存在不报错
rotate 14 # 保留14天
compress # 压缩旧日志
delaycompress # 下一次切割时再压缩
notifempty # 空文件不切割
create 0640 nginx nginx # 创建新文件并设置权限
sharedscripts # 只执行一次脚本
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 $(cat /var/run/nginx.pid)
fi
endscript
}

1440

被折叠的 条评论
为什么被折叠?



