logrotate के साथ zstd से संकुचन करते हुए, 1 घंटे के अंतराल पर nginx के लॉग को विभाजित करने के लिए
एक नोट्स छोड़ा गया है।
सारांश
सीधे, /etc/logrotate.conf या /etc/logrotate.d/ में सेटिंग डालने से मूल रूप से/etc/cron.daily/logrotate की दैनिक क्रॉन में निष्पादित किया जाएगा।
इस बार हम 1 घंटे के अंतराल पर लॉग रोटेट करना चाहते हैं, इसलिए logrotate की सेटिंग अलग से तैयार की है,
systemd के टाइमर फ़ीचर का उपयोग करके इसे निष्पादित किया गया।
zstd को सक्षम करना
# apt install zstd
logrotate
/etc/logrotate-nginx.conf बनाने का निर्णय लेते हैं।
इस बार zstd का उपयोग किया जा रहा है, लेकिन bzip2 आदि को एक जैसे सेट करके बदला जा सकता है।
# cat << _EOF_ > /etc/logrotate-nginx.conf
compresscmd /usr/bin/zstd # zstd का पथ निर्दिष्ट करें
compressoptions -12 # zstd को दिए जाने वाले विकल्प। व्यक्तिगत रूप से -12 अच्छा था
compressext .zst # जोड़ी जाने वाली एक्सटेंशन
/var/log/nginx/*.log {
missingok
rotate 720 # 24 घंटे * 30 दिन
dateext
dateformat -%Y%m%d%H
compress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi \
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}
_EOF_
systemd
- सेवा को परिभाषित करें
# cat << _EOF_ > /etc/systemd/system/logrotate-nginx.service
[Unit]
Description=logrotate-nginx
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/logrotate -f /etc/logrotate-nginx.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
_EOF_
- टाइमर को परिभाषित करें
# cat << _EOF_ > /etc/systemd/system/logrotate-nginx.timer
[Unit]
Description=logrotate-nginx
[Timer]
OnCalendar=*:00:00
[Install]
WantedBy=timers.target
_EOF_
- systemd की सेटिंग्स को पढ़ें
# systemctl daemon-reload
- टाइमर को सक्षम करें
# systemctl enable logrotate-nginx.timer
- टाइमर शुरू करें
# systemctl start logrotate-nginx.timer
- टाइमर की स्थिति की जांच करें
# systemctl status logrotate-nginx.timer
● logrotate-nginx.timer - logrotate-nginx
Loaded: loaded (/etc/systemd/system/logrotate-nginx.timer; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-03-29 20:00:00 JST; 5h 58min ago
Trigger: n/a
Triggers: ● logrotate-nginx.service
Mar 29 19:00:00 log systemd[1]: Started logrotate-nginx.
Active के तहत अगली बार निष्पादित होने वाला समय, लॉग में पहले किए गए निष्पादन के समय को देखा जा सकता है🎉
2023 नवंबर में अपडेट
यदि यह 1 घंटे के अंतराल पर है, तो यह अधिक चिंता का विषय नहीं है, लेकिन 1 मिनट के अंतराल पर लॉग विभाजित किया जाता है, तो टाइमर की सटीकता के कारण, थोड़ा अंतर हो सकता है, और अनुमानित समय के अलावा भी समय शामिल हो सकता है।
इसलिए, यदि आप इसे सटीक 0 सेकंड पर निष्पादित करना चाहते हैं, तो निम्नलिखित के रूप में सेट करना उचित है।
[Unit]
Description=logrotate-nginx
[Timer]
OnCalendar=*:*:00
AccuracySec=1s
[Install]
WantedBy=timers.target
AccuracySec को निर्दिष्ट करके, इसे 1 सेकंड के अंतराल पर निष्पादित किया जा सकता है।