国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Linux日志定時(shí)輪詢(xún)流程機制

發(fā)布時(shí)間:2021-09-14 18:13 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 服務(wù)器 歡迎投稿:712375056

本篇內容介紹了“Linux日志定時(shí)輪詢(xún)流程機制”的有關(guān)知識,在實(shí)際案例的操作過(guò)程中,不少人都會(huì )遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學(xué)有所成!

logrotate介紹

對于Linux系統安全來(lái)說(shuō),日志文件是極其重要的工具。日志文件包含了關(guān)于系統中發(fā)生的事件的有用信息,在排障過(guò)程中或者系統性能分析時(shí)經(jīng)常被用到。當日志文件不斷增長(cháng)的時(shí)候,就需要定時(shí)切割,否則,寫(xiě)日志的速度和性能也會(huì )下降,更不便于我們歸檔,查詢(xún)。

所以便有了使用logrotate的時(shí)候  ,logrotate是個(gè)十分有用的工具,它可以自動(dòng)對日志進(jìn)行截斷(或輪循)、壓縮以及刪除舊的日志文件。例如,你可以設置logrotate,讓/var/log/foo日志文件每30天輪循,并刪除超過(guò)6個(gè)月的日志。配置完后,logrotate的運作完全自動(dòng)化,不必進(jìn)行任何進(jìn)一步的人為干預。

logrotate配置文件位置

Linux系統默認安裝logrotate工具,它默認的配置文件在:

/etc/logrotate.conf  /etc/logrotate.d/

logrotate.conf 才主要的配置文件,logrotate.d  是一個(gè)目錄,該目錄里的所有文件都會(huì )被主動(dòng)的讀入/etc/logrotate.conf中執行。

另外,如果 /etc/logrotate.d/  里面的文件中沒(méi)有設定一些細節,則會(huì )以/etc/logrotate.conf這個(gè)文件的設定來(lái)作為默認值。

實(shí)際運行時(shí),Logrotate會(huì )調用配置文件/etc/logrotate.conf。

可以在/etc/logrotate.d目錄里放置自定義好的配置文件,用來(lái)覆蓋Logrotate的缺省值。

定時(shí)輪循機制

Logrotate是基于CRON來(lái)運行的,其腳本是/etc/cron.daily/logrotate,日志輪轉是系統自動(dòng)完成的。

logrotate這個(gè)任務(wù)默認放在cron的每日定時(shí)任務(wù)cron.daily下面  /etc/cron.daily/logrotate/etc/目錄下面還有cron.weekly/, cron.hourly/, cron.monthly/  的目錄都是可以放定時(shí)任務(wù)的

[/etc]$ cat /etc/cron.daily/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

這里實(shí)際操作輪詢(xún)的命令***一行

/usr/sbin/logrotate /etc/logrotate.conf

定義好了每日執行任務(wù)的腳本cron.daily/logrotate ,再查看crontab的內容,里面設置好了對應的cron.xxly

執行時(shí)間

[/etc]$ vim /etc/crontab  SHELL=/bin/sh  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin     # m h dom mon dow user    command  17 *    * * *    root    cd / && run-parts --report /etc/cron.hourly  25 6    * * *    root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )  47 6    * * 7    root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )  52 6    1 * *    root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

可以看出來(lái)了只要是在

  • /etc/cron.daily/ 下面的任務(wù)都是每天6:25 執行

  • /etc/cron.weekly/ 下面的任務(wù)都是每周日 6:47 執行

  • /etc/cron.monthly/ 下面的任務(wù)都是每月1號 6:52 執行

如果等不及cron自動(dòng)執行日志輪轉,想手動(dòng)強制切割日志,需要加-f參數;

不過(guò)正式執行前***通過(guò)Debug選項來(lái)驗證一下(-d參數),這對調試也很重要

# /usr/sbin/logrotate -f /etc/logrotate.d/nginx // 未到時(shí)間或者未到切割條件,強制切割  # /usr/sbin/logrotate -d -f /etc/logrotate.d/nginx // 輸出切割debug信息

那么至此,我們就知道logrotate是如何實(shí)現自動(dòng)切割日志的

logrotate配置案例

nginx 常用日志切割配置

/data/log/nginx/*.log /data/log/nginx/*/*.log { # 對匹配上的日志文件進(jìn)行切割      weekly # 每周切割      missingok     # 在日志輪循期間,任何錯誤將被忽略,例如“文件無(wú)法找到”之類(lèi)的錯誤。      rotate 6      # 保留 6 個(gè)備份      compress     # 壓縮      delaycompress    # delaycompress 和 compress 一起使用時(shí),轉儲的日志文件到下一次轉儲時(shí)才壓縮      notifempty     # 如果是空文件的話(huà),不轉儲      create 0644 www-data ymserver     # mode owner group 轉儲文件,使用指定的文件模式創(chuàng  )建新的日志文件      sharedscripts # 下面詳細說(shuō)      prerotate # 在logrotate轉儲之前需要執行的指令,例如修改文件的屬性等動(dòng)作;必須獨立成行          if [ -d /etc/logrotate.d/httpd-prerotate ]; then \              run-parts /etc/logrotate.d/httpd-prerotate; \          fi \      endscript      postrotate  # 在logrotate轉儲之后需要執行的指令,例如重新啟動(dòng) (kill -HUP) 某個(gè)服務(wù)!必須獨立成行          [ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`      endscript      su root ymserver # 輪訓日志時(shí)切換設置的用戶(hù)/用戶(hù)組來(lái)執行(默認是root),如果設置的user/group 沒(méi)有權限去讓文件容用 create 選項指定的擁有者 ,會(huì )觸發(fā)錯誤。  }

如果要配置一個(gè)每日0點(diǎn)執行切割任務(wù),怎么做到?我們的logrotate默認每天執行時(shí)間已經(jīng)寫(xiě)到了/etc/cron.daily/目錄下面,而這個(gè)目錄下面的任務(wù)執行時(shí)間上面也說(shuō)了,在/etc/crontab里面定義了時(shí)6:25。我之前就有個(gè)這樣的需求,看看下面的配置

/data/log/owan_web/chn_download_stat/chn_app_rec.log {      copytruncate      # weekly 注釋了 但是會(huì )繼承/etc/logrorate.conf的全局變量,也是weekly      missingok      rotate 10      compress      delaycompress      size=1000M # 大小到達size開(kāi)始轉存      notifempty      create 664 www-data ymserver      su root      dateext       //這個(gè)參數很重要!就是切割后的日志文件以當前日期為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來(lái)是按數字遞增,即前面說(shuō)的 xxx.log-1這種格式      compress      //是否通過(guò)gzip壓縮轉儲以后的日志文件,如xxx.log-20131216.gz ;如果不需要壓縮,注釋掉就行  }

然后去root的crontab配置一個(gè)0點(diǎn)執行的任務(wù)

wwwadm@host:/etc/logrotate.d$ sudo crontab -l -u root  0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/web_roteate -fv  >/tmp/logro.log 2>&1

因為logrotate的切割周期是weekly,每次切割都是根據上一個(gè)切割的時(shí)間來(lái)進(jìn)行,如果距離上一次有一周時(shí)間,就會(huì )切割,但是我們設置了crontab的每天切割,既不會(huì )進(jìn)入/etc/cron.daily/的每日切割,也不會(huì )每周切割。這樣就能***定制自己想要的切割日志時(shí)間

logrotate參數說(shuō)明

compress 通過(guò)gzip 壓縮轉儲以后的日志

    nocompress 不做gzip壓縮處理

    create mode owner group 輪轉時(shí)指定創(chuàng  )建新文件的屬性,如create 0777 nobody nobody

    nocreate 不建立新的日志文件

    delaycompress 和compress 一起使用時(shí),轉儲的日志文件到下一次轉儲時(shí)才壓縮

    nodelaycompress 覆蓋 delaycompress 選項,轉儲同時(shí)壓縮。

    missingok 如果日志丟失,不報錯繼續滾動(dòng)下一個(gè)日志

    ifempty 即使日志文件為空文件也做輪轉,這個(gè)是logrotate的缺省選項。

    notifempty 當日志文件為空時(shí),不進(jìn)行輪轉

    mail address 把轉儲的日志文件發(fā)送到指定的E-mail 地址

    olddir directory 轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個(gè)文件系統

    noolddir 轉儲后的日志文件和當前日志文件放在同一個(gè)目錄下

    sharedscripts 運行postrotate腳本,作用是在所有日志都輪轉后統一執行一次腳本。如果沒(méi)有配置這個(gè),那么每個(gè)日志輪轉后都會(huì )執行一次腳本

    prerotate 在logrotate轉儲之前需要執行的指令,例如修改文件的屬性等動(dòng)作;必須獨立成行

    postrotate 在logrotate轉儲之后需要執行的指令,例如重新啟動(dòng) (kill -HUP) 某個(gè)服務(wù)!必須獨立成行

    daily 指定轉儲周期為每天

    weekly 指定轉儲周期為每周

    monthly 指定轉儲周期為每月

    rotate count 指定日志文件刪除之前轉儲的次數,0 指沒(méi)有備份,5 指保留5 個(gè)備份

    dateext 使用當期日期作為命名格式

    dateformat .%s 配合dateext使用,緊跟在下一行出現,定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m%d %s 這四個(gè)參數

    size(或minsize) log-size 當日志文件到達指定的大小時(shí)才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).

    當日志文件 >= log-size 的時(shí)候就轉儲。 以下為合法格式:(其他格式的單位大小寫(xiě)沒(méi)有試過(guò))

    size = 5 或 size 5 (>= 5 個(gè)字節就轉儲)

    size = 100k 或 size 100k

    size = 100M 或 size 100M

值得注意的一個(gè)配置是:copytruncate

copytruncate 如果沒(méi)有這個(gè)選項的話(huà),操作方式:是將原log日志文件,移動(dòng)成類(lèi)似log.1的舊文件, 然后創(chuàng )建一個(gè)新的文件。  如果設置了,操作方式:拷貝原日志文件,并且將其變成大小為0的文件。

區別是如果進(jìn)程,比如nginx 使用了一個(gè)文件寫(xiě)日志,沒(méi)有copytruncate的話(huà),切割日志時(shí), 把舊日志log->log.1  ,然后創(chuàng )建新日志log。這時(shí)候nginx 打開(kāi)的文件描述符依然時(shí)log.1,由沒(méi)有信號通知nginx  要換日志描述符,所以它會(huì )繼續向log.1寫(xiě)日志,這樣就不符合我們的要求了。 因為我們想切割日志后,nginx 自動(dòng)會(huì )向新的log  文件寫(xiě)日志,而不是舊的log.1文件

解決方法有兩個(gè):

1.向上面的nginx 切割日志配置,再postrotate里面寫(xiě)個(gè)腳本

postrotate  # 在logrotate轉儲之后需要執行的指令,例如重新啟動(dòng) (kill -HUP) 某個(gè)服務(wù)!必須獨立成行      [ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`  endscript

這樣就是發(fā)信號給nginx ,讓nginx 關(guān)閉舊日志文件描述符,重新打開(kāi)新的日志文件描述,并寫(xiě)入日志

2.使用copytruncate參數,向上面說(shuō)的,配置了它以后,操作方式是把log 復制一份  成為log.1,然后清空l(shuí)og的內容,使大小為0,那此時(shí)log依然時(shí)原來(lái)的舊log,對進(jìn)程(nginx)來(lái)說(shuō),依然打開(kāi)的是原來(lái)的文件描述符,可以繼續往里面寫(xiě)日志,而不用發(fā)送信號給nginx

copytruncate這種方式操作的時(shí)候, 拷貝和清空之間有一個(gè)時(shí)間差,可能會(huì )丟失部分日志數據。

nocopytruncate 備份日志文件不過(guò)不截斷

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

无码中文精品专区一区二区| 久久亚洲色WWW成人不卡| 亚洲2019无码天堂| 午夜.dj高清在线| 一二三四视频免费社区5| 久久乐国产精品亚洲综合|