当前位置: 首页 > ai >正文

通过logrotate和cronolog对日志进行切割

我的进程启动system文件

[Unit]
Description=TestDaemon
After=network-online.target
Requires=network-online.target[Service]
User=admin
Group=admin
Environment=GOLOG_LOG_FMT=nocolor
Environment=GOLOG_LOG_LEVEL=info
Environment=GOLOG_FILE=/data/test/test.log
Environment=TEST_LOG_LEVEL_NAMED=vm:error,badgerbs:info,sub:errorEnvironment=TEST_REPO=/data/test
Environment=TEST_CONFIG=/etc/test/config.toml# 256G
Environment=TEST_BLOCKSTORE_CACHE_SIZE=5000000
Environment=TEST_STATESTORE_CACHE_SIZE=3000000Environment=LOTUS_VM_ENABLE_TRACING=1
#Environment=TEST_HAMT_PARALLEL_WORKER_LIMIT=16
#Environment=TEST_AMT_PARALLEL_WORKER_LIMIT=16ExecStart=/usr/local/bin/test daemon#ExecStartPost=/usr/local/bin/start-lily-worker.shExecStartPost=/usr/local/bin/job.sh watchRestart=always
RestartSec=10
TimeoutSec=0
TimeoutStartSec=0[Install]
WantedBy=multi-user.target

编写文件/etc/logrotate.d/test

/data/test/test.log {daily                  # 每天分割一次rotate 14              # 保留 14 天的日志compress               # 压缩旧日志,节省空间missingok              # 如果文件不存在也不报错notifempty             # 空文件不处理create 644 admin admin # 新日志文件权限和属主postrotatesystemctl kill -s HUP test.serviceendscript
}

daily:每天轮转
weekly:每周轮转
monthly:每月轮转

测试

logrotate -f /etc/logrotate.d/test

查询新生成的日志

# ls -lh /data/test/test.log*
-rw-r--r-- 1 admin admin 841K Apr 29 04:30 /data/test/test.log
-rw-r--r-- 1 admin admin 1.9M Apr 29 04:17 /data/test/test.log.1.gz

改成每三天一次

prerotate 中的 [ ( ( (( (((date +%s) / 86400 % 3)) -eq 0 ] || exit 1:意思是只有每3天(从Unix纪元以来的天数 mod 3 == 0)才轮转,否则提前退出(不执行日志切割)

/data/test/test.log {missingoknotifemptycompressdelaycompressrotate 14create 644 admin adminsu admin admindateextdateformat -%Y%m%dprerotate[ $(($(date +%s) / 86400 % 3)) -eq 0 ] || exit 1endscriptpostrotatesystemctl restart test.serviceendscript
}

将 logrotate 配置放进一个 cron 任务,每3天执行

创建一个 cron 文件:

sudo crontab -e
# 添加内容如下(每3天凌晨2点执行):
0 2 */3 * * /usr/sbin/logrotate -f /etc/logrotate.d/test

你的 test 进程需要支持 收到 HUP 信号时重新打开日志文件。
如果 test不支持 HUP 信号 reopen,可以稍微改成用 systemctl restart test.service(但这会重启进程)。
如果你想更精细,比如每小时分一次,可以用 logrotate 的 hourly,但需要额外设置计划任务。

ExecStart=/usr/local/bin/test daemon | /usr/bin/cronolog /data/test/test-%Y-%m-%d.log

这样的话,每天生成一个新文件,比如:

/data/test/test-2025-04-29.log
/data/test/test-2025-04-30.log

不过这种方法会让你的 systemd 不直接管理 test的日志(因为日志被 cronolog 接走了),出错排查稍微麻烦

方法特点适合情况
logrotate正统、稳定、方便管理建议优先使用
cronolog 管道方式实时按时间分对日志要求实时分割的情况
http://www.xdnf.cn/news/2899.html

相关文章:

  • 什么是DNS缓存?怎么清理DNS缓存?
  • 网络安全攻防演练实训室建设方案
  • 9.idea中创建springboot项目
  • Next框架学习篇 ✅
  • Nginx部署与源码编译构建LAMP
  • Java基础 4.29
  • OpenJDK 1.8中-Xloggc参数下GC日志覆盖与追加模式深度解析
  • 软文发稿:媒体发稿的关键策略及实战价值
  • Android Studio中OpenCV应用详解:图像处理、颜色对比与OCR识别
  • 水污染检测数据集VOC+YOLO格式2487张4类别
  • mangodb的数据库与集合命令,文档命令
  • 字节跳动社招面经 —— BSP驱动工程师(4)
  • 【计算机网络】DHCP——动态配置ip地址
  • 仿真干货|云端CAE实战——OpenRadioss物品碰撞模拟分析
  • day006
  • FPGA 39 ,FPGA 网络通信协议栈进阶,RGMII、ARP 与 UDP 协议与模块设计( RGMII、ARP、UDP原理与模块设计 )
  • 基于STM32的中点圆算法,画空心圆的函数
  • 【MongoDB篇】MongoDB的数据库操作!
  • 通义千问最新一代大语言模型Qwen3发布了
  • 前端漏洞不扫描理由
  • 各服务日志: Grok正则解析
  • 高瓴资本张磊的顶级价值投资之道
  • 通信原理第七版与第六版区别附pdf
  • Alibaba国际站商品详情AP接口概述,json数据示例返回参考
  • 分布式系统的基石:从 CAP 理论到一致性算法全解析(简化版)
  • Centos 7系统 宝塔部署Tomcat项目(保姆级教程)
  • Spring知识点梳理
  • 【算法练习】归并排序和归并分治
  • 【C++贪心】P6023 走路|普及
  • 2025.4.29总结