使用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