我在 Ubuntu 20.04 上有以下配置:
/home/impulse/nginx/log/*/notice.log /home/impulse/nginx/log/*/access.status_ok.log /home/impulse/nginx/log/*/access.status_erro.log {
daily
nomail
dateext
rotate 31
dateyesterday
create root root
notifempty
nocompress
extension .log
# Script to notify nginx that logfile changed.
postrotate
docker exec -ti impulse_web sudo pkill -HUP nginx
endscript
}
docker
sudo
服务器上仅允许通过二进制文件。postrotate
脚本未被执行。
我的问题是,在哪个帐户下运行logrotate
?而且,我可以记录它的执行情况以跟踪为什么没有应用它吗?
当在终端上使用 调用时,该脚本即可运行sudo
。
我当前的日志目录:
-rw-r--r-- 1 root root 3073955 fev 3 11:02 access.status_ok-20210128.log
-rw-r--r-- 1 root root 0 jan 29 00:00 access.status_ok.log
由于access.status_ok.log
为空,logrotate 失败。由于postrotate
失败,nginx 继续在旧文件中记录日志。
答案1
这个问题有2个误解:
HUP
发送到 nginx 的信号使其重新打开日志文件:它不会,USR1
但会,请参见此处:https://nginx.org/en/docs/control.html- 该信号已发送给所有 nginx 进程:它不应该,它应该只发送给主进程,请参见此处:https://mailman.nginx.org/pipermail/nginx/2011-January/024438.html
而 FACEPALM 的一个主要原因是:
docker exec
脚本中postrotate
一定没有-ti
选项,因为它不是在交互式终端中运行.....
的调试日志systemd
一直都在那里,但它们没有被记录在 中/var/log/syslog
。以下内容有所帮助:
https://unix.stackexchange.com/questions/225401/how-to-see-full-log-from-systemctl-status-service
https://askubuntu.com/questions/1083537/how-do-i-properly-install-a-systemd-timer-and-service