Ubuntu
logrotate postrotate 似乎沒有被執行
我在 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一直在記錄舊文件。
這個問題有兩個誤解:
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