zoukankan      html  css  js  c++  java
  • pm2按日期切割日志

    使用pm2管理node应用的进程时,进程运行期间的日志会一直往一个文件中写入。

    默认的情况下会写入~/.pm2/logs/xxx-id.out 和 ~/.pm2/logs/xxx-id.err中,我们可以在向pm2注册该应用时,手动指定日志路径和文件

    例如: 应用启动文件为app.js 首次注册该应用,pm2 start app.js --name myapp -o ./logs/myapp.out -e ./logs/myapp.err

    这样就会在当前目录下的logs目录中生成myapp.out 和 myapp.err两个文件,日志将会写入这两个文件中。

    但是一旦应用的日志量很大,长时间运行必然会使myapp.out这个文件无限增大。

    打开日志文件很慢,日志跟踪也越来越麻烦。 一般理想的做法是按日期去分割日志,但是目前的pm2好像没有提供这项功能(不知道是否有大神知道如何配置),我们只好通过某种机制去实现按日期写日志。

    我使用的系统是centos, 可以配合定时任务管理器crontab实现。 基本的思想是在每天某一个时间,

    例如凌晨3点钟,将上一天的日志改成,以上一天时间命名的日志文件中,然后新建一个日志文件,然后让pm2将日志文件重新定位到新的日志文件中

    首先,需要一个切分日志的脚本cutlog.sh

    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服务

    Crontab重启
    
    Linux:service crond restart 或者/etc/init.d/crond restart
    
    ubuntu: sudo service cron restart
    
    Mac:sudo /usr/sbin/cron restart
    

      

    cutlog.sh文件要有执行权限

    可以用chmod命令修改

    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

  • 相关阅读:
    rabbitmq channel参数详解
    rabbitmq direct、fanout、topic 三种Exchange java 代码比较
    spark 性能优化
    spark sql 窗口函数over partition by
    Python爬虫从入门到进阶(4)之xpath的使用
    Python爬虫从入门到进阶(3)之requests的使用
    Python爬虫从入门到进阶(2)之urllib库的使用
    Mac环境下Redis的安装
    Mac环境下Vagrant的安装
    Mac环境下Scrapy的安装
  • 原文地址:https://www.cnblogs.com/yangwenzhi/p/9772244.html
Copyright © 2011-2022 走看看