1. 程式人生 > >logrotate 刪除過期的日誌

logrotate 刪除過期的日誌

程式生成的日誌檔案一般需要定期清理,不然既浪費空間又不便於檢視。

linux中有個logrotate的程式可以很方便的配置日誌清理規則(可以根據時間,日誌檔案大小等來進行日誌的清理)。

介紹一下幾種配置模式…

create 模式:

重新命名原先的日誌檔案,並通知程式重新開啟一個日誌檔案(重啟程式,或者傳送訊號通知應用程式重新開啟一個日誌檔案)。

Logrotate size option: Rotate the log file when file size reaches a specific limit

If you want to rotate a log file (for
example, /tmp/output.log) for every 1KB, create the logrotate.conf as shown below. $ cat logrotate.conf /tmp/output.log { size 1k create 700 bala bala rotate 4 } This logrotate configuration has following three options: size 1k – logrotate runs only if the filesize is equal to (or
greater than) this size. create – rotate the original file and create the new file with specified permission, user and group. rotate – limits the number of log file rotation. So, this would keep only the recent 4 rotated log files.

copytruncate 模式:

複製日誌檔案中的內容到其他檔案中,並將該日誌檔案的size設定為0。
注意:如果檔案不是以APPEND

模式開啟的,則會出現原先日誌檔案被複制走的部分內容會變成 \0,而在新寫入日之後,檔案的size會重新恢復到之前的大小(very bad…),所以 copytruncate 要求檔案必須以 APPEND 模式開啟。。

Logrotate copytruncate option: Continue to write the log information in the newly created file after rotating the old log file.

$ cat logrotate.conf
/tmp/output.log {
         size 1k
         copytruncate
         rotate 4
}
copytruncate instruct logrotate to creates the copy of the original file (i.e rotate the original log file) and truncates the original file to zero byte size. This helps the respective service that belongs to that log file can write to the proper file.

APPEND模式開啟就是這樣的:

std::ofstream ofs;
ofs.open ("test.txt", std::ofstream::out | std::ofstream::app)

或者:

FILE* logfile
logfile = fopen("abc.log","wa");

這樣的缺點就是程式每一次啟動時,如果已經存在一個對應的檔案,最新的日誌就會追加到該檔案末尾,而不是清空該日誌檔案然後再寫入。

一個可用的配置如下:

# 配置需要rotate的檔案,和 size 等
[email protected]:~/robotwork$ cat /etc/logrotate.d/guowei.log
/home/guowei/robotwork/*.log {
        rotate 2
        size 30k
        copytruncate
        notifempty
        missingok
}

# 然後配置每個小時 rotate一下( cp /etc/cron.daily/logrotate /etc/cron.hourly/ ):
[email protected]:~/robotwork$ cat /etc/cron.hourly/logrotate 
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

按照上述配置好後,然後執行一下這個,你就會發現你的日誌檔案被rotate了:

sudo run-parts /etc/cron.daily  # or cron.hourly

相關推薦

logrotate 刪除過期日誌

程式生成的日誌檔案一般需要定期清理,不然既浪費空間又不便於檢視。 linux中有個logrotate的程式可以很方便的配置日誌清理規則(可以根據時間,日誌檔案大小等來進行日誌的清理)。 介紹一下幾種配置模式… create 模式: 重新命名原先的日誌檔案

Log4j按大小、日期生成gz壓縮檔案並刪除過期日誌

1、準備jar  :log4j-1.2.17.jar,commons-logging-1.2.jar,這2個就可以了,其他關於日誌的jar包就不要加進來了,在優先順序上會有衝突。 2、定義一個類,繼承RollingFileAppender類,這個類是按照日誌大小滾動生成日誌

log4j2 自動刪除過期日誌檔案配置及實現原理解析

  日誌檔案自動刪除功能必不可少,當然你可以讓運維去做這事,只是這不地道。而日誌元件是一個必備元件,讓其多做一件刪除的工作,無可厚非。本文就來探討下 log4j 的日誌檔案自動刪除實現吧。 0. 自動刪除配置參考樣例: (log4j2.xml) <?xml version="1.0" enc

RMAN刪除過期的歸檔日誌

用rman進入把歸檔日誌刪除 1)命令>rman target/ 2)命令>crosscheck archivelog all; 3)命令>delete expired archivelog all; 4)命令>exit 檢視歸檔日誌的備份情況 r

python中用logging實現日誌滾動和過期日誌刪除

用python中的logging庫實現日誌滾動和過期日誌刪除。 logging庫提供了兩個可以用於日誌滾動的class(可以參考https://docs.python.org/2/library/logging.handlers.html),一個是Rota

使用logrotate切割nginx日誌

配置文件 local 切割 配置:1、在/etc/logrotate.d目錄下創建一個nginx的配置文件"nginx"配置內容如下#vim /etc/logrotate.d/nginx/usr/local/nginx/logs/*.log {dailyrotate 5missingoknotif

通過RMAN刪除歸檔日誌不釋放問題

軟件 oracle 空間 google 操作系統 我的生產環境中歸檔日誌滿了,通過如下腳本刪除後,空間並沒有釋放,看有網友有相關的解決思路,可以跟大家一起分享一下:RMAN> crosscheck archivelog all;RMAN> delete expried arch

RMAN刪除歸檔日誌不釋放問題

oracle今天同事問到一個問題,他那邊的一套Oracle 11g數據庫使用RMAN沒辦法刪除舊的歸檔,導致磁盤使用率很高。[email protected]/* */:[/opt/oracle/archive/db] ls -ltr |moretotal 3059881082 -rw-r----

CentOS Linux使用logrotate分割管理日誌

日誌切割logrotate程序是一個日誌文件管理工具。用於分割日誌文件,刪除舊的日誌文件,並創建新的日誌文件,起到“轉儲”作用。可以節省磁盤空間。logrotate命令格式:logrotate [OPTION...] <configfile>-d, --debug :debug模式,測試配置文件是

刪除過期備份時報no channel allocated for maintenance(of an appropriate type)

刪除過期備份時報no channel allocated for maintenance(of an appropriate type)問題描述:AIX 平臺Oracle 10G,今天發現數據庫歸檔空間滿了,就通過crosscheck 後,執行delete force obsolete時報no channel

12c DataGuard 無法刪除歸檔日誌

dataguard rman-08137 一、環境描述Oracle 12c 單實例DataGuardRhel 7.3二、測試過程主庫操作1.關閉DG,切換日誌SQL> alter system set log_archive_dest_state_2=defer;System altered.S

linux logrotate 刪除某天前

日誌 var nod res 策略 使用 args ins print crontab crontab -l 01 */2 * * * /usr/sbin/logrotate -v /opt/shell_app/appengine >/tmp/logrotate.lo

SQL Server 2008 收縮日誌 清空刪除日誌文件

時間 server 系統 cti sim 個數 class alter sql2005 SQL2008 的收縮日誌 由於SQL2008對文件和日誌管理進行了優化,所以以下語句在SQL2005中可以運行但在SQL2008中已經被取消:(SQL2005)BackupLog

windows下自動刪除過期文件的腳本

local spa 登錄 指定 頻率 mtime 天都 ogr 命令 windows下自動刪除過期文件的腳本 前言: 比如日誌文件每天都產生,時間長了就會有很大的一堆垃圾。整理一下 定時刪除文件的方法。 正文: Windows: 定時刪除tomcat日誌和緩存。可以保

Redis 過期鍵的設置、獲取和刪除過期時間

sans tle 整數 時間 lis class 情況下 title 結構 Redis 過期鍵的設置、獲取和刪除過期時間 轉自http://blog.51cto.com/littledevil/1813956 設置過期 默認情況下鍵是沒有生存時間的,也就是永不過期,除非

oracle 歸檔模式下刪除current日誌不完全恢復

com variable file end mounted 啟動數據庫 lte status archive 歸檔模式 SYS@orcl> archive log list Database log mode Archive Mode Automat

oracle 刪除歸檔日誌

time arch 模式 顯示 清理 plus cover sele lec su - oracle sqlplus / as sysdba 首先查詢Oracle歸檔空間使用情況,語句如下: select * from V$FLASH_RECOVERY_AREA_USAGE

利用logrotate對Tomcat日誌進行切分

最近在做伺服器資源釋放的時候發現有一臺伺服器的find命令無法使用(原因不詳),所以之前利用cronolog對Tomcat日誌進行切分之後。是基於包含find命令的shell指令碼做的自動清理。這時就想到了用logrotate對Tomcat日誌進行切分。 1、指令碼如下: /usr/lo

利用logrotate對nginx日誌進行切分

1、指令碼如下: /gdsfapps/flgw/logs/nginx/*.log{ missingok dateext notifempty daily rotate 7 sharedscripts postrotate if [ -f /usr/local/nginx/logs/nginx

Linux自帶的logrotate 來管理日誌

起因:nginx日誌以及服務日誌竟然高達57G   大家可能都有管理日誌的需要,比如定時壓縮日誌,或者當日志超過一定大小時就自動分裂成兩個檔案等,我發現其實Linux自帶的logrotate命令就能夠實現這樣的功能。      為了使用它,主要有兩個地方需要修改一下:一個是/etc/logrotate.