當前位置:首頁 » 編程軟體 » 日誌切割腳本

日誌切割腳本

發布時間: 2023-01-17 05:36:19

A. linux下使用cronolog切割伺服器日誌文件的方法

Linux下運行的Web伺服器Apache,默認日誌文件是不分割的,一個整文件既不易於管理,也不易於分析統計。安裝cronolog後,可以將日誌文件按時間分割,易於管理和分析。

cronolog安裝配置非常簡單,下載後只需要輸入幾個命令即可完成。

1、下載(最新版本)

# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz

2、解壓縮

# tar zxvf cronolog-1.6.2.tar.gz

3、進入cronolog安裝文件所在目錄

# cd cronolog-1.6.2

4、運行安裝

# ./configure

# make

# make install

5、查看cronolog安裝後所在目錄(驗證安裝是否成功)

# which cronolog

一般情況下顯示為:/usr/local/sbin/cronolog

整個安裝過程結束,下面需要把日誌的格式配置一下:

1、虛擬主機配置文件 httpd-vhosts.conf

將Web日誌設置 CustomLog 修改為以下格式

CustomLog "|/usr/local/sbin/cronolog /www/logs/example_%Y%m%d.log" combined

當然,錯誤日誌設置 ErrorLog 也可以利用 cronolog 分割,設置為

ErrorLog "|/usr/local/sbin/cronolog /www/logs/error_%Y%m%d.log"

2、如果伺服器上只有一個站點(當然這種情況比較少),直接按上面所說格式修改 httpd.conf 文件日誌設置部分。

說明:

綠色部分 為 cronolog 安裝後所在位置,系統版本不同可能位置不完全一樣,以 which 命令查看到的位置為准;

藍色部分 為設置的日誌文件所在位置,根據需要修改;

紅色部分 為設置的日誌文件標識性字元,根據需要修改;

%Y%m%d 為日誌文件分割方式,例子中為「年月日」,也可以修改成自己需要的。

修改httpd.conf文件:

這個文件在我的電腦上是在 /etc/httpd/conf/httpd.conf 不同的伺服器 應該是不一樣的

在最後加上

# ServerAdmin [email protected]

# DocumentRoot /www/docs/mmy-host.example.com

# ServerName mmy-host.example.com

ErrorLog /data/logs/apache/webapps.wps.cn-error_log

CustomLog "|/usr/local/sbin/cronolog /data/logs/apache/%Y%m%d/access_log.%H" combined

#這個保證了每天一個文件夾 文件夾下 每個小時產生一個log

#CustomLog "|/usr/local/sbin/cronolog /data/logs/apache/%Y%m%%Hdaccess_log" combined

進入到 /etc/init.d/httpd configtest 這樣驗證你的配置文件是否正確

進入到 /etc/init.d/httpd restart 重啟apache 伺服器(不同的'系統應該是不一樣 要自己找到)

用於Tomcat

第一步

if [ -z "$CATALINA_OUT" ] ; then

CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out

fi

修改為

if [ -z "$CATALINA_OUT" ] ; then

CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d

fi

第二步

touch "$CATALINA_OUT"

改為

#touch "$CATALINA_OUT"

第三步

org.apache.catalina.startup.Bootstrap "$@" start

>> "$CATALINA_OUT" 2>&1 &

修改為

org.apache.catalina.startup.Bootstrap "$@" start 2>&1

| /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &

重新啟動 Tomcat

service tomcat restart

可以在 Tomcat 的 logs 目錄底下找到以系統日期為結尾的 catalina.out.yyyy-mm-dd 的檔案,這樣子就成功了。

後續就是持續觀察看看是不是每天都有產生一個新的 catalina.out.yyyy-mm-dd 檔案。然後再安排定期刪除這些較舊的 log 檔即可。

B. Linux shell腳本按日期 切割pm2日誌

linux shell腳本按日期 切割pm2日誌 (解決定時任務pm2命令無法執行問題,原因:沒有環境變數)

首先在輸入命令echo $PATH 拿到當前系統環境變數

然後在/root/.pm2目錄新建cutlog.sh文件(注意:第一句一定要有,設置當前shell腳本裡面的環境變數,沒有的話pm2命令會無法執行)

PATH=/root/.nvm/versions/node/v6.10.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

CURPATH=/root/.pm2

OUTPATH=/home/cutLogsDate

mkdir -p $OUTPATH

INPUTPATH=$CURPATH/logs

reloadProcessLogs(){

        logFilesGame="${INPUTPATH}/$1"

        yesterday=`date -d last-day '+%Y%m%d_'$2`

        logOfLastDay=$OUTPATH/$yesterday.log

        mv $logFilesGame $logOfLastDay

        touch $logFilesGame

        echo "切割$1成功"

}

reloadProcessLogs 'game-out-0.log' 'game_out'

pm2 reloadLogs設置定時任務

輸入crontab -e命令編輯

0 3 * * * sh /root/.pm2/cutlog.sh

C. Nginx日誌切割方法(包含docker容器中nginx日誌的切割)

logrotate軟體簡介

logrotate 是一個 Bash 的 SHELL 腳本,可對日誌文件進行切分,並將切分後的日誌放在統一目錄。

logrotate 要求 GNU bash、GNU gzip 和 GNU date。

logrotate 實用程序旨在簡化在生成大量日誌文件的系統上對日誌文件的管理。允許自動循環壓縮,刪除和郵寄日誌文件。可以將logrotate設置為每小時、每天、每周、每月或當日誌文件達到一定大小時處理日誌文件。

一般來說,logrotate是linux自帶的服務,根據不同日誌服務配置獨立的配置文件,一般是在/etc/logrotate.d。

切割nginx日誌的配置文件內容如下:(nginx安裝在宿主機上)

切割nginx日誌的配置文件內容如下:(nginx安裝在docker容器上)

腳本說明:

"nginx"為容器名稱,可以按實際調整

文件中「/var/log/nginx/」為nginx日誌默認目錄,由於在nginx.conf文件中可以調整日誌目錄,所以需要跟據需求調整。

檢測命令:

logrotate -d -f /etc/logrotate.d/docker_nginx

手動執行命令:

logrotate -f /etc/logrotate.d/docker_nginx

配置自定義的crontab任務

把 logrotate 的任務計劃刪掉,在每天凌晨00:00進行切割nginx日誌

logrotate參數:

D. Linux系統下nginx日誌每天定時切割的腳本寫法

下面是deepvps自己用的自動每天定時切割Nginx日誌的`腳本,很方便很好用,推薦給大家使用。本腳本也是參考了張宴老師的文章,再次感謝張宴老師。

1、創建腳本/usr/local/nginx/sbin/cut_nginx_log.sh

vi /usr/local/nginx/sbin/cut_nginx_log.sh

輸入以下內容:

#!/bin/bash

# This script run at 00:00

# The Nginx logs path

logs_path=」/home/www/logs/」

mkdir -p ${logs_path}$(date -d 「yesterday」 +」%Y」)/$(date -d 「yesterday」 +」%m」)/

mv ${logs_path}access.log ${logs_path}$(date -d 「yesterday」 +」%Y」)/$(date -d 「yesterday」 +」%m」)/access_$(date -d 「yesterday」 +」%Y%m%d」).log

kill -USR1 `cat /usr/local/nginx/nginx.pid`

2、設置crontab,每天凌晨00:00切割nginx訪問日誌

crontab -e

輸入以下內容:

00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh

E. nginx日誌切割腳本,手動執行沒問題,計劃任務執行得到的日誌文件為空,請問這是什麼問題啊

應該是沒執行完,設置斷點看一下在什麼地方中斷了。建議自動腳本裡面所有命令和參數都寫絕對路徑,有時候相對路徑的問題可能會影響命令的執行。

F. nginx日誌切割腳本怎麼運行

創建當前時間目錄,比如年/月目錄
然後將當前指定的日誌,剪切到該創建好的目錄下
重啟nginx服務,重新生成0kb大小的新日誌文件
通過計劃任務,周期性執行以上切割日誌,重新生成日誌的操作就能達到既讓日誌文件保持一定大小而且又能按照指定的時間格式和目錄進行存放。方面查詢的便利和文件打開的快速。
切割腳本代碼如下:

1 #!/bin/bash
2
3 #原nginx日誌存放路徑
4 log_files_path="/home/wwwlogs/"
5
6 #nginx切割後存放路徑
7 log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
8
9 #待切割日誌名稱集合如access.log error.log
10 log_files_name=(access error)

G. Ingress-nginx日誌切割與輪循方案

一, 基礎鏡像
由於我們已解決了許可權的問題,所以不需要initContainer來更改許可權。日誌切割和輪循,基於鏡像:hub.c.163.com/combk8s/logrotate:v1.1
從history看,這個鏡像也只是在alpine之上,安裝了bash,logrotate軟體,然後,拷貝並啟動了start.sh文件。

二, Dockerfile
為了不與k8s綁死,我們不使用configmap作配置文件,而是使用使用環境變數生成nginx.log配置。
Dockerfile

nginx.log模板

start.sh重寫

腳本使用傳入的環境變數,替換掉nginx.log模板文件中的對應變數。沒有環境變數時,也提供必要默認值。
暫時計劃是每天凌晨產生備份,只保存最近兩個備份。

三, Yaml集成
在ingress應用的yaml文件里,植入一個新的container即可。

四,驗證
kubectl logs -f pod可以看到crontab輸出

五, logrotate和crontab聯動細節想像
start.sh中寫入/etc/crontabs/root文件中的數據:
0 */2 * * * /usr/sbin/logrotate -v /etc/logrotate.conf
表示logrotae命令每2小時執行一次,它會將nginx.log配置中的周期(daily)寫入/etc/periodic/daily/logrotate文件(如果設置了size,會無視 daily, weekly,monthly 指令,所以size的優先順序比較高。)。
/etc/periodic/daily/logrotate中的動態生成的內容如下:

此文件會被/etc/crontabs/root中的如下行觸發:
0 2 * * * run-parts /etc/periodic/daily
於是,這時就會在每天凌晨2點,生成日誌切割和歸檔文件。
神奇~

六,Logrotate參數
compress/nocompress---gzip壓縮/不壓縮
truncate/notruncate---用於還在打開中的日誌,把當前日誌備份並截斷/備份但是不截斷
create mode ower group/nocreate---指定文件模式創建新的日誌文件/不創建新的日誌文件
delaycompress/nodelaycompress ---和compress一起,日誌到下一次轉存是壓縮/轉存同時壓縮
ifempty/notifempty ---空文件也轉存,默認/空文件不轉存
mail address / nomail--- 日誌發送到指定的mail地址
olddir directory/noolddir--- 轉存後日後i文件放入指定目錄,必須和當前日誌文件同一個文件系統
prerotate/endscript--- 在執行轉存之前需執行的命令,關鍵字必須單獨占行
postroutate/endscript ---在執行轉存之後需執行的命令,關鍵字必須單獨占行
daily ---周期每天
weekly ---周期每周
monthly ---周期每月
rotate count ---轉存次數,0表示不備份,5表示保留5個備份
size size ---當指定文件達到指定大小時才轉存
tabootext[+] list ---不轉存指定的擴展名,默認擴展名含.rpm-oring
error address ---錯誤信息發送到指定的mail地址
missingok ---如果日誌文件丟失,進入到下一個不發出錯誤消息
sharedscripts ---可以寫多個日誌文件,同時執行一個腳本,搭配腳本關鍵字
include ---包含文件
dateext ---為日誌打上日期標簽

七,參考URL

https://my.oschina.net/u/4605142/blog/4521708
https://www.jb51.net/article/183828.htm

H. nginx日誌切割腳本怎麼運行

第一步就是重命名日誌文件,不用擔心重命名後nginx找不到日誌文件而丟失日誌。在你未重新打開原名字的日誌文件前,nginx還是會向你重命名的文件寫日誌,linux是靠文件描述符而不是文件名定位文件。
第二步向nginx主進程發送USR1信號。
nginx主進程接到信號後會從配置文件中讀取日誌文件名稱,重新打開日誌文件(以配置文件中的日誌名稱命名),並以工作進程的用戶作為日誌文件的所有者。
重新打開日誌文件後,nginx主進程會關閉重名的日誌文件並通知工作進程使用新打開的日誌文件。
工作進程立刻打開新的日誌文件並關閉重名名的日誌文件。
然後你就可以處理舊的日誌文件了。
二、腳本實現
nginx日誌按日期自動切割腳本如下:
復制代碼代碼如下:
#nginx日誌切割腳本
#!/bin/bash
#設置日誌文件存放目錄
logs_path="/usr/local/nginx/logs/"
#設置pid文件
pid_path="/usr/local/nginx/nginx.pid"
#重命名日誌文件
mv
${logs_path}access.log
${logs_path}access_$(date
-d
"yesterday"
+"%Y%m%d").log
#向nginx主進程發信號重新打開日誌
kill
-USR1
`cat
${pid_path}`
保存以上腳本nginx_log.sh,並設置定時切割任務

I. nginx多server日誌分割腳本

1,配置多個server日誌只要在$website變數增加並用空格分開就行。

2,循環創建日誌目錄

3,分割後用xz 壓縮,當然沒安裝可以用gzip bzip2等等。

4,注意我配置nginx日誌文件名為 "access_{{站點網站}}.log" "error_{{站點網站}}.log"

復制代碼 代碼如下:

# !/usr/bin/bash

log_dir="/usr/local/nginx/logs"

back_log_dir="/disk110/nginx_log"

time=`date +%Y%m%d-%H:%M:%S`

website="www.test1.com www.test2.com www.test3.com";

for i in $website

do

if [ ! -d ${back_log_dir}/${i} ]

then

mkdir ${back_log_dir}/${i}

fi

done

for i in $website

do

if [ -s ${log_dir}/access_${i}.log ]

then

mv ${log_dir}/access_${i}.log ${back_log_dir}/${i}/access_${time}.log

fi

if [ -s ${log_dir}/error_${i}.log ]

then

mv ${log_dir}/error_${i}.log ${back_log_dir}/${i}/error_${time}.log

fi

done

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

for i in $website

do

if [ -s ${back_log_dir}/${i}/access_${time}.log ]

then

xz ${back_log_dir}/${i}/access_${time}.log

fi

if [ -s ${back_log_dir}/${i}/error_${time}.log ]

then

xz ${back_log_dir}/${i}/error_${time}.log

fi

done

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:705
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:969
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:677
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:830
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:738
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1077
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:309
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:189
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:875
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:831