天天看點

nohup啟動造成日志過大的問題(使用logrotate工具分割日志)

作者:sinosun

以下所有測試均在Ubunt 22.04下測試和嚴重

root@aaa-Inspiron-3847:/etc/logrotate.d# cat /etc/lsb-release

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=22.04

DISTRIB_CODENAME=jammy

DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"

root@aaa-Inspiron-3847:/etc/logrotate.d#           

我們知道在Linux下,使用下面的指令啟動服務時

bin/ck600svr -c config/ck600svr.properties &           

當我們關閉控制台時,服務會自動停止

nohup啟動造成日志過大的問題(使用logrotate工具分割日志)

關閉tab标簽,服務會自動關閉

是以我們經常增加nohup來啟動服務

nohup bin/ck600svr -c config/ck600svr.properties &           

這樣當我們關閉控制台時,服務可以背景運作

但是這樣會有個問題,會預設生成一個nohup.out的日志

nohup啟動造成日志過大的問題(使用logrotate工具分割日志)

如果服務長期運作,這個日志檔案會越來越大,以至于無法打開。

解決辦法一:不生成nohup.out檔案

nohup ./bin/ck600svr -c config/ck600svr.properties >/dev/null 2>log & //隻輸出錯誤資訊到日志檔案
  nohup ./bin/ck600svr -c config/ck600svr.properties >/dev/null 2>&1 & //無任何資訊輸出           

2>&1表示将标準錯誤輸出重定向到标準輸出,這樣,程式或者指令的正常輸出和錯誤輸出就可以在标準輸出輸出。

這樣就沒有nohup.out檔案了,但是我如果還想看nohup.out,還希望nohup能自動拆分是不是就更完美了,于是乎logrotate出場了。

logrotate 程式是一個日志檔案管理工具。用來把舊的日志檔案删除,并建立新的日志檔案,我們把它叫做“轉儲”。我們可以根據日志檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。

/etc/logrotate.conf 和/etc/logrotate.d/,其中

logrotate.conf 是主要的參數檔案,logrotate.d 是一個目錄,該目錄裡面的所有資料都會被主動讀入/etc/logrotate.conf 當中來進行。另外,在/etc/logrotate.d/ 裡面的檔案中,如果沒有指定一些詳細的設定,則以 /etc/logrotate.conf 的規定來指定為預設值。

nohup啟動造成日志過大的問題(使用logrotate工具分割日志)

vim ck600檢視配置檔案:

nohup啟動造成日志過大的問題(使用logrotate工具分割日志)

logrotate 配置檔案的主要參數

參 緻 參數說明
daily 日志的輪替周期是毎天
weekly 日志的輪替周期是每周
monthly 日志的輪控周期是每月
rotate數宇 保留的日志檔案的個數。0指沒有備份
compress 當進行日志輪替時,對舊的日志進行壓縮
create mode owner group 建立新日志,同時指定新日志的權限與所有者和所屬組.如create 0600 root utmp
mail address 當進行日志輪替時.輸出記憶體通過郵件發送到指定的郵件位址
missingok 如果日志不存在,則忽略該日志的警告資訊
nolifempty 如果曰志為空檔案,則不進行日志輪替
minsize 大小 日志輪替的最小值。也就是日志一定要達到這個最小值才會進行輪持,否則就算時間達到也不進行輪替
size大小 日志隻有大于指定大小才進行日志輪替,而不是按照時間輪替,如size 100k
dateext 使用日期作為日志輪替檔案的字尾,如secure-20130605
sharedscripts 在此關鍵宇之後的腳本隻執行一次
prerotate/cndscript 在曰志輪替之前執行腳本指令。endscript辨別prerotate腳本結束
postrolaie/endscript 在日志輪替之後執行腳本指令。endscripi辨別postrotate腳本結束

然後使用 logrotate -f 使配置生效,你學會了麼?

繼續閱讀