温馨提示×

linux nohup日志如何分割

小樊
45
2026-09-03 10:31:55
栏目: 智能运维

在 Linux 下使用 nohup 运行程序时,日志一般会重定向到 nohup.out 或某个日志文件,nohup 本身并不具备日志分割能力。要实现日志分割,常见方案如下:


一、最常见方案:用 logrotate(推荐)

logrotate 是 Linux 自带的日志管理工具,适合长期运行的服务。

示例

假设日志文件为 /home/user/app/logs/app.log

创建配置 /etc/logrotate.d/myapp

/home/user/app/logs/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

要点说明:

  • copytruncate关键,先复制日志再清空原文件,适合 nohup 进程不重启的场景
  • daily / weekly:分割周期
  • rotate 7:保留 7 份
  • compress:压缩旧日志

二、用 cron + split(简单但不够优雅)

0 0 * * * mv app.log app.log.$(date +%F) && touch app.log

⚠️ 问题:

  • 如果程序一直写原文件描述符,可能导致日志丢失
  • 不如 copytruncate 安全

三、启动时就避免 nohup.out 无限增长

1. 使用 multilog / svlogd(daemontools)

适合运维级服务

2. 使用 rotatelogs(Apache 工具)

nohup ./app | rotatelogs app.log.%Y%m%d 86400 &

四、使用 systemd(现代最佳实践)

如果可以不用 nohup,推荐:

[Service]
ExecStart=/path/to/app
StandardOutput=append:/var/log/app.log

配合 logrotate 使用。


五、快速总结建议

场景 推荐方案
简单脚本 nohup + logrotate
长期服务 systemd + logrotate
不想改启动方式 logrotate + copytruncate

如果你愿意,可以告诉我:

  • 你的 Linux 发行版
  • 启动命令示例
  • 日志路径

我可以帮你写一份可直接用的配置。

0