新四季網

log常用命令(使用logrotate命令輪轉和歸檔日誌)

2023-05-13 18:51:09 1

使用此 Linux 命令保持日誌文件更新。

日誌非常適合找出應用程式在做什麼或對可能的問題進行故障排除。幾乎我們處理的每個應用程式都會生成日誌,我們希望我們自己開發的應用程式也生成日誌。日誌越詳細,我們擁有的信息就越多。但放任不管,日誌可能會增長到無法管理的大小,反過來,它們可能會成為它們自己的問題。因此,最好將它們進行裁剪,保留我們需要的那些,並將其餘的歸檔。

基本功能

logrotate實用程序在管理日誌方面非常出色。它可以輪轉日誌、壓縮日誌、通過電子郵件發送日誌、刪除日誌、歸檔日誌,並在你需要時開始記錄最新的。

運行 logrotate非常簡單——只需要運行logrotate -vs state-file config-file。在上面的命令中,v選項開啟詳細模式,s指定一個狀態文件,最後的config-file是配置文件,你可以指定需要做什麼。

實戰演練

讓我們看看在我們的系統上靜默運行的 logrotate配置,它管理我們在/var/log目錄中找到的大量日誌。查看該目錄中的當前文件。你是否看到很多*.[number].gz文件?這就是logrotate正在做的。你可以在/etc/logrotate.d/rsyslog下找到此配置文件。我的配置文件如下:

/var/log/syslog{ rotate 7 daily missingok notifempty delaycompress compress postrotate reload rsyslog > /dev/null 2>&1 || true endscript}/var/log/mail.info/var/log/mail.warn/var/log/mail.err/var/log/mail.log/var/log/daemon.log/var/log/kern.log/var/log/auth.log/var/log/user.log/var/log/lpr.log/var/log/cron.log/var/log/debug/var/log/messages{ rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate reload rsyslog > /dev/null 2>&1 || true endscript}

該文件首先定義了輪轉 /var/log/syslog文件的說明,這些說明包含在後面的花括號中。以下是它們的含義:

rotate 7: 保留最近 7 次輪轉的日誌。然後開始刪除超出的。daily: 每天輪轉日誌,與rotate 7一起使用,這意味著日誌將保留過去 7 天。其它選項是每周、每月、每年。還有一個大小參數,如果日誌文件的大小增加超過指定的限制(例如,大小 10k、大小 10M、大小 10G 等),則將輪轉日誌文件。如果未指定任何內容,日誌將在運行logrotate時輪轉。你甚至可以在 cron 中運行logrotate以便在更具體的時間間隔內使用它。missingok: 如果日誌文件缺失也沒關係。不要驚慌。notifempty: 日誌文件為空時不輪轉。compress: 開啟壓縮,使用nocompress關閉它。delaycompress: 如果壓縮已打開,則將壓縮延遲到下一次輪轉。這允許至少存在一個輪轉但未壓縮的文件。如果你希望昨天的日誌保持未壓縮以便進行故障排除,那麼此配置會很有用。如果某些程序在重新啟動/重新加載之前可能仍然寫入舊文件,這也很有幫助,例如 Apache。postrotate/endscript: 輪轉後運行此部分中的腳本。有助於做清理工作。還有一個prerotate/endscript用於在輪轉開始之前執行操作。

你能弄清楚下一節對上面配置中提到的所有文件做了什麼嗎?第二節中唯一多出的參數是 sharedscripts,它告訴logrotate在所有日誌輪轉完成之前不要運行postrotate/endscript中的部分。它可以防止腳本在每一次輪轉時執行,只在最後一次輪轉完成時執行。

看點新的東西

我使用下面的配置來處理我系統上的 Nginx的訪問和錯誤日誌。

/var/log/nginx/access.log/var/log/nginx/error.log { size 1 missingok notifempty create 544 www-data adm rotate 30 compress delaycompress dateext dateformat -%Y-%m-%d-%s sharedscripts extension .log postrotate service nginx reload endscript}

上面的腳本可以使用如下命令運行:

logrotate -vs state-file /tmp/logrotate

第一次運行該命令會給出以下輸出:

reading config file /tmp/logrotateextension is now .logHandling 1 logsrotating pattern: /var/log/nginx/access.log/var/log/nginx/error.log 1 bytes (30 rotations)empty log files are not rotated, old logs are removedconsidering log /var/log/nginx/access.log log needs rotatingconsidering log /var/log/nginx/error.log log does not need rotatingrotating log /var/log/nginx/access.log, log-rotateCount is 30Converted ' -%Y-%m-%d-%s' - '-%Y-%m-%d-%s'dateext suffix '-2021-08-27-1485508250'glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'glob finding logs to compress failedglob finding old rotated logs failedrenaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.logcreating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4running postrotate script* Reloading nginx configuration nginx

第二次運行它:

reading config file /tmp/logrotateextension is now .logHandling 1 logsrotating pattern: /var/log/nginx/access.log/var/log/nginx/error.log 1 bytes (30 rotations)empty log files are not rotated, old logs are removedconsidering log /var/log/nginx/access.log log needs rotatingconsidering log /var/log/nginx/error.log log does not need rotatingrotating log /var/log/nginx/access.log, log-rotateCount is 30Converted ' -%Y-%m-%d-%s' - '-%Y-%m-%d-%s'dateext suffix '-2021-08-27-1485508280'glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'compressing log with: /bin/gziprenaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.logcreating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4running postrotate script* Reloading nginx configuration nginx

第三次運行它:

reading config file /tmp/logrotateextension is now .logHandling 1 logsrotating pattern: /var/log/nginx/access.log/var/log/nginx/error.log 1 bytes (30 rotations)empty log files are not rotated, old logs are removedconsidering log /var/log/nginx/access.log log needs rotatingconsidering log /var/log/nginx/error.log log does not need rotatingrotating log /var/log/nginx/access.log, log-rotateCount is 30Converted ' -%Y-%m-%d-%s' - '-%Y-%m-%d-%s'dateext suffix '-2021-08-27-1485508316'glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'compressing log with: /bin/gziprenaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.logcreating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4running postrotate script* Reloading nginx configuration nginx

狀態文件的內容如下所示:

logrotate state -- version 2"/var/log/nginx/error.log" 2021-08-27-9:0:0"/var/log/nginx/access.log" 2021-08-27-9:11:56

下載 Linux logrotate 備忘單

本文首發於作者個人博客,經授權改編。

via: https://opensource.com/article/21/10/linux-logrotate

作者:Ayush Sharma選題:lujun9972譯者:perfiffer校對:wxy

本文由 LCTT原創編譯,Linux中國榮譽推出

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了