如何使用 logrotate 命令保持日誌檔案更新
日誌非常適合找出應用程式在做什麼或對可能的問題進行故障排除。幾乎我們處理的每個應用程式都會生成日誌,我們希望我們自己開發的應用程式也生成日誌。日誌越詳細,我們擁有的資訊就越多。但放任不管,日誌可能會增長到無法管理的大小,反過來,它們可能會成為它們自己的問題。因此,最好將它們進行裁剪,保留我們需要的那些,並將其餘的歸檔。
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/logrotate extension is now .log Handling 1 logs rotating pattern: /var/log/nginx/access.log /var/log/nginx/error.log 1 bytes (30 rotations) empty log files are not rotated, old logs are removed considering log /var/log/nginx/access.log log needs rotating considering log /var/log/nginx/error.log log does not need rotating rotating log /var/log/nginx/access.log, log->rotateCount is 30 Converted ' -%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 failed glob finding old rotated logs failed renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4 running postrotate script * Reloading nginx configuration nginx
第二次執行它:
reading config file /tmp/logrotate extension is now .log Handling 1 logs rotating pattern: /var/log/nginx/access.log /var/log/nginx/error.log 1 bytes (30 rotations) empty log files are not rotated, old logs are removed considering log /var/log/nginx/access.log log needs rotating considering log /var/log/nginx/error.log log does not need rotating rotating log /var/log/nginx/access.log, log->rotateCount is 30 Converted ' -%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/gzip renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4 running postrotate script * Reloading nginx configuration nginx
第三次執行它:
reading config file /tmp/logrotate extension is now .log Handling 1 logs rotating pattern: /var/log/nginx/access.log /var/log/nginx/error.log 1 bytes (30 rotations) empty log files are not rotated, old logs are removed considering log /var/log/nginx/access.log log needs rotating considering log /var/log/nginx/error.log log does not need rotating rotating log /var/log/nginx/access.log, log->rotateCount is 30 Converted ' -%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/gzip renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4 running 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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2842540/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Linux中,如何使用logrotate命令管理日誌檔案?Linuxlogrotate
- 使用logrotate配置日誌輪詢logrotate
- 日誌切分神器--logrotatelogrotate
- nginx1.24配置logrotate日誌切割Nginxlogrotate
- 日誌檔案使用小結(轉)
- Postgres使用pg_resetwal命令修改wal日誌檔案大小的方法
- Linux中監視日誌檔案常用的命令!Linux
- selenium-日誌檔案的使用(十二)
- Linux 日誌檔案系統如何工作Linux
- springboot使用logback記錄日誌,配置檔案Spring Boot
- 華納雲:Linux中如何用logrotate管理每日增長的日誌Linuxlogrotate
- 在Linux中,有一堆日誌檔案,如何刪除7天前的日誌檔案?Linux
- Windows下用命令列工具ADRCI跟蹤日誌檔案Windows命令列
- 【MySQL日誌】MySQL日誌檔案初級管理MySql
- 【Oracle】如何修改資料檔案和日誌檔案的路徑Oracle
- 定時將系統時間更新在日誌檔案中
- Oracle使用備份檔案集恢復歸檔日誌Oracle
- java專案日誌配置檔案Java
- 使用配置檔案方式記錄Python程式日誌Python
- 使用 shell 命令統計日誌
- 日誌切割logrotate和定時任務crontab詳解logrotate
- logrotate 不支援不同裝置間的日誌轉儲logrotate
- 如何使用curl命令下載檔案
- 日誌檔案過大清理
- sybase iq日誌檔案管理
- MySQL InnoDB日誌檔案配置MySql
- 在Oracle中,如何定時刪除歸檔日誌檔案?Oracle
- 使用 google_breakpad 分析 Electron 崩潰日誌檔案Go
- 使用logrotate日誌切割工具輪循mysql的error.log/slow.log,遇到未生成壓縮檔案,測試執行卻正常logrotateMySqlError
- 如何將日誌檔案和二進位制檔案快速匯入HDFS?
- SpringBoot指定日誌檔案和日誌Profile功能Spring Boot
- Laravel 指定日誌檔案記錄任意日誌Laravel
- 探究MySQL中的日誌檔案MySql
- mysql的日誌檔案詳解MySql
- lumen 日誌按天生成檔案
- tempdb日誌檔案暴增分析
- nginx日誌配置檔案說明Nginx
- linux 日誌log檔案 截斷Linux