日志文件包含了關(guān)于系統(tǒng)中發(fā)生的事件的有用信息,在排障過程中或者系統(tǒng)性能分析時經(jīng)常被用到。對于忙碌的服務(wù)器,日志文件大小會增長極快,服務(wù)器會很快消耗磁盤空間,這成了個問題。除此之外,處理一個單個的龐大日志文件也常常是件十分棘手的事。
張家口ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
logrotate是個十分有用的工具,它可以自動對日志進行截斷(或輪循)、壓縮以及刪除舊的日志文件。例如,你可以設(shè)置logrotate,讓/var/log/foo日志文件每30天輪循,并刪除超過6個月的日志。配置完后,logrotate的運作完全自動化,不必進行任何進一步的人為干預(yù)。
在Debian或Ubuntu上:
在Fedora,CentOS或RHEL上:
logrotate的配置文件是/etc/logrotate.conf,通常不需要對它進行修改。日志文件的輪循設(shè)置在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。
參數(shù)詳解:
上面的模板是通用的,而配置參數(shù)則根據(jù)你的需求進行調(diào)整,不是所有的參數(shù)都是必要的。
logrotate可以在任何時候從命令行手動調(diào)用。要調(diào)用為/etc/lograte.d/下配置的所有日志調(diào)用logrotate:
要為某個特定的配置調(diào)用logrotate,執(zhí)行一次切割任務(wù)測試
即使輪循條件沒有滿足,我們也可以通過使用‘-f’選項來強制logrotate輪循日志文件,‘-v’參數(shù)提供了詳細的輸出。
防止訪問日志文件過大
logrotate工具對于防止因龐大的日志文件而耗盡存儲空間是十分有用的。配置完畢后,進程是全自動的,可以長時間在不需要人為干預(yù)下運行。本教程重點關(guān)注幾個使用logrotate的幾個基本樣例,你也可以定制它以滿足你的需求。
linux shell腳本按日期 切割pm2日志 (解決定時任務(wù)pm2命令無法執(zhí)行問題,原因:沒有環(huán)境變量)
首先在輸入命令echo $PATH 拿到當(dāng)前系統(tǒng)環(huán)境變量
然后在/root/.pm2目錄新建cutlog.sh文件(注意:第一句一定要有,設(shè)置當(dāng)前shell腳本里面的環(huán)境變量,沒有的話pm2命令會無法執(zhí)行)
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設(shè)置定時任務(wù)
輸入crontab -e命令編輯
0 3 * * * sh /root/.pm2/cutlog.sh
Linux下運行的Web服務(wù)器Apache,默認日志文件是不分割的,一個整文件既不易于管理,也不易于分析統(tǒng)計。安裝cronolog后,可以將日志文件按時間分割,易于管理和分析。
cronolog安裝配置非常簡單,下載后只需要輸入幾個命令即可完成。
1、下載(最新版本)
# wget
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
整個安裝過程結(jié)束,下面需要把日志的格式配置一下:
1、虛擬主機配置文件 httpd-vhosts.conf
將Web日志設(shè)置 CustomLog 修改為以下格式
CustomLog "|/usr/local/sbin/cronolog /www/logs/example_%Y%m%d.log" combined
當(dāng)然,錯誤日志設(shè)置 ErrorLog 也可以利用 cronolog 分割,設(shè)置為
ErrorLog "|/usr/local/sbin/cronolog /www/logs/error_%Y%m%d.log"
2、如果服務(wù)器上只有一個站點(當(dāng)然這種情況比較少),直接按上面所說格式修改 httpd.conf 文件日志設(shè)置部分。
說明:
綠色部分 為 cronolog 安裝后所在位置,系統(tǒng)版本不同可能位置不完全一樣,以 which 命令查看到的位置為準;
藍色部分 為設(shè)置的日志文件所在位置,根據(jù)需要修改;
紅色部分 為設(shè)置的日志文件標(biāo)識性字符,根據(jù)需要修改;
%Y%m%d 為日志文件分割方式,例子中為“年月日”,也可以修改成自己需要的。
修改httpd.conf文件:
這個文件在我的電腦上是在 /etc/httpd/conf/httpd.conf 不同的服務(wù)器 應(yīng)該是不一樣的
在最后加上
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-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
#這個保證了每天一個文件夾 文件夾下 每個小時產(chǎn)生一個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 服務(wù)器(不同的'系統(tǒng)應(yīng)該是不一樣 要自己找到)
用于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" 21
修改為
org.apache.catalina.startup.Bootstrap "$@" start 21
| /usr/local/sbin/cronolog "$CATALINA_OUT" /dev/null
重新啟動 Tomcat
service tomcat restart
可以在 Tomcat 的 logs 目錄底下找到以系統(tǒng)日期為結(jié)尾的 catalina.out.yyyy-mm-dd 的檔案,這樣子就成功了。
后續(xù)就是持續(xù)觀察看看是不是每天都有產(chǎn)生一個新的 catalina.out.yyyy-mm-dd 檔案。然后再安排定期刪除這些較舊的 log 檔即可。
這個腳本是在LNMP論壇看到的,你可以試試
腳本如下:
#!/bin/bash#function:cut nginx log files for lnmp v0.5 and v0.6#author: #設(shè)置你的日志存放的目錄log_files_path="/home/wwwlogs/"#日志以年/月的目錄形式存放log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")#設(shè)置需要進行日志分割的日志文件名稱,多個以空格隔開log_files_name=(access )#設(shè)置nginx的安裝路徑nginx_sbin="/usr/local/nginx/sbin/nginx"#Set how long you want to savesave_days=30 #############################################Please do not modify the following script #############################################mkdir -p $log_files_dir log_files_num=${#log_files_name[@]} #cut nginx log filesfor((i=0;i$log_files_num;i++));domv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").logdone #delete 30 days ago nginx log filesfind $log_files_path -mtime +$save_days -exec rm -rf {} \;
$nginx_sbin -s reload
把上面的保存為.sh文件,然后給上可執(zhí)行權(quán)限,再配合Linux的計劃任務(wù),完美拉~~~
nohup.out日志文件太大了,且一直增長,命令查看日志受阻
①切割大文件變成多個小文件
②每天定時保存前一天的日志,重新記錄當(dāng)天日志
1.利用split命令切割
①按文件大小切割大文件:
切割文件:將ohup.out文件每500M切割一個文件放到/home/nginx/logs/newlog/目錄下
②按文件行數(shù)切割大文件:
查詢文件行數(shù):
wc -l b.log
2038711 b.log
按50W行切割一個文件:
split -l 500000 -d -a 4 /home/nginx/logs/b.log /home/nginx/logs/newlog/
2.定時備份前一天日志,重新記錄當(dāng)天日志splitlog.sh
3.定時執(zhí)行
查看定時任務(wù):
crontab -l
編輯定時任務(wù):
crontab -e
重啟定時任務(wù):
刪除10天以前的日志文件,此日期為文件本身的時間,非日志內(nèi)容時間
有些服務(wù),會自動產(chǎn)生大量的日志文件,如果不限制,會占用磁盤空間。
如果單純的用定時任務(wù)crontab刪除,又不太靈活,這時需要日志神器logrotate。
logrotate工具是系統(tǒng)自帶為了方便進行日志管理而產(chǎn)生的一個工具。
系統(tǒng)會定時運行 logrotate,一般是每天一次。也是基于定時任務(wù)crontab運行的。
配置文件:
主配置文件的位置在 /etc/logrotate.conf,一般配置在 /etc/logrotate.d/子目錄下。
如系統(tǒng)默認日志配置:
配置文件參數(shù):
更多信息請參考man logrotate幫助文檔
模板是通用的,而配置參數(shù)則根據(jù)你的需求進行調(diào)整,不是所有的參數(shù)都是必要的。
在上面的配置文件中,我們只想要輪詢一個日志文件,size=50M 指定日志文件大小可以增長到 50MB,dateext 指 示讓舊日志文件以創(chuàng)建日期命名。
可自行參考/etc/logrotate.d/目錄下系統(tǒng)默認的文件。
logrotate命令:
具體 logrotate 命令格式如下:
要為某個特定的配置調(diào)用 logrotate:
排障過程中的最佳選擇是使用-d選項以預(yù)演方式運行 logrotate。要進行驗證,不用實際輪循任何日志文件, 可以模擬演練日志輪循并顯示其輸出。
正如我們從上面的輸出結(jié)果可以看到的,logrotate 判斷該輪循是不必要的。如果文件的時間小于一天,就會發(fā)生了。
強制輪循即使輪循條件沒有滿足,我們也可以通過使用-f選項來強制 logrotate 輪循日志文件,-v參數(shù)提供了詳細的輸出。
個人項目配置:
項目每天可產(chǎn)生20G左右的日志,顯示不能做每日輪詢,所以額外需要添加定時任務(wù)做每小時,或者每隔多少分鐘。
如果輪詢?nèi)罩井惓箦e如下:
error: skipping “” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.”
需要加 su root root 選項。
同時添加定時任務(wù):
定時任務(wù)說明:
第一條,每隔40分鐘輪詢執(zhí)行一次logrotate任務(wù)。
第二條,每天凌晨4點刪除前一天的日志,原因如下:
由于項目系統(tǒng)產(chǎn)生日志格式的原因,會導(dǎo)致以下情況:
如果昨天的分割到4個后(或者1,2,3),時間到第二天后,沒法轉(zhuǎn)儲遞增,會一直停留在4,沒法刪除,每天會有,久而久之,也會占用磁盤空間。所以需要定時刪除。
設(shè)置完成
開啟定時任務(wù)日志,以便查看定時任務(wù)是否執(zhí)行。后續(xù)可取消。
重啟rsyslog
當(dāng)前標(biāo)題:日志分割linux命令 linux截取日志的命令
URL網(wǎng)址:http://aaarwkj.com/article12/docpidc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站導(dǎo)航、電子商務(wù)、網(wǎng)站設(shè)計公司、軟件開發(fā)、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)