使用pm2管理node應用的進程時,進程運行期間的日誌會一直往一個文件中寫入。html
默認的狀況下會寫入~/.pm2/logs/xxx-id.out 和 ~/.pm2/logs/xxx-id.err中,咱們能夠在向pm2註冊該應用時,手動指定日誌路徑和文件node
例如: 應用啓動文件爲app.js 首次註冊該應用,pm2 start app.js --name myapp -o ./logs/myapp.out -e ./logs/myapp.errcentos
這樣就會在當前目錄下的logs目錄中生成myapp.out 和 myapp.err兩個文件,日誌將會寫入這兩個文件中。bash
可是一旦應用的日誌量很大,長時間運行必然會使myapp.out這個文件無限增大。app
打開日誌文件很慢,日誌跟蹤也愈來愈麻煩。 通常理想的作法是按日期去分割日誌,可是目前的pm2好像沒有提供這項功能(不知道是否有大神知道如何配置),咱們只好經過某種機制去實現按日期寫日誌。日誌
我使用的系統是centos, 能夠配合定時任務管理器crontab實現。 基本的思想是在天天某一個時間,code
例如凌晨3點鐘,將上一天的日誌改爲,以上一天時間命名的日誌文件中,而後新建一個日誌文件,而後讓pm2將日誌文件從新定位到新的日誌文件中htm
首先,須要一個切分日誌的腳本cutlog.shblog
export PATH=$PATH:/usr/local/bin CURPATH=/root/.pm2/logs LOGPATH=$CURPATH logFile=$LOGPATH/app-out.log yesterday=`date -d last-day "+%Y%m%d"` logOfLastDay=$LOGPATH/$yesterday.log mv $logFile $logOfLastDay touch $logFile pm2 reloadLogs //刪除5天前的文件 fivedaysago=`date -d "5 days ago" "+%Y%m%d"` logOfFiveDaysAgo=$LOGPATH/$fivedaysago.log rm -rf $logOfFiveDaysAgo
而後註冊定時任務進程
使用crontab -e編輯定時任務
先聲明必要的環境變量
SHELL=/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
0 3 * * * sh /root/
.pm2
/logs/cutlog.sh
(使用cutlog.sh的絕對路徑) 表示天天凌晨三點鐘執行分割日誌的腳本 而後重啓crond服務
cutlog.sh文件要有執行權限
chmod 755 cutlog.sh
-rwxr-xr-x 1 root root 202 10月 11 11:33 cutlog.sh
crontab詳情請看:https://www.cnblogs.com/yangwenzhi/p/9772236.html