温馨提示×

nohup日志怎么分割

小樊
44
2026-08-31 07:47:39
栏目: 编程语言

nohup 命令本身不会自动分割日志,它只是把标准输出/错误追加到 nohup.out 里,不轮转、不归档。
要实现 nohup 日志分割,常见做法有下面几种(从简单到推荐)。


一、最简单:重定向 + 手动 rotate(不推荐长期用)

nohup java -jar app.jar > app.log 2>&1 &

然后定期:

mv app.log app.log.2026-01-21
touch app.log

⚠️ 缺点:

  • 需要重启或手动操作
  • 不适合生产环境

二、使用 logrotate(✅ 最推荐)

1️⃣ 示例:为 nohup.out 设置轮转

假设日志路径:

/opt/app/nohup.out

创建 logrotate 配置:

sudo vim /etc/logrotate.d/app

内容示例:

/opt/app/nohup.out {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

2️⃣ 参数说明

参数 说明
daily 按天轮转
rotate 7 保留 7 份
compress 压缩旧日志
missingok 日志不存在不报错
notifempty 空文件不轮转
copytruncate 复制后清空(适合 nohup)

不需要重启程序,适合 nohup 场景


三、不使用 nohup.out,改为带日期日志(推荐)

方法 1:直接按日期输出

nohup java -jar app.jar > app-$(date +%Y%m%d).log 2>&1 &

缺点:

  • 不会自动切割
  • 第二天要重启

四、使用 cronolog(老系统常用)

nohup ./app | cronolog app.%Y%m%d.log &

✅ 自动按天切割
❌ 需要额外安装 cronolog


五、使用 systemd(✅ 最规范方式)

如果你可以不用 nohup强烈推荐 systemd

示例服务

[Unit]
Description=app

[Service]
ExecStart=/usr/bin/java -jar /opt/app/app.jar
StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/app.log
Restart=always

[Install]
WantedBy=multi-user.target

再用 logrotate 管理 /var/log/app/app.log


六、总结推荐方案

场景 推荐方案
临时测试 nohup 重定向
生产环境 ✅ nohup + logrotate
长期运行 ✅ systemd + logrotate
老系统 cronolog

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

  • 你的系统(CentOS / Ubuntu)
  • 日志路径
  • 程序是否必须 nohup

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

0