温馨提示×

debian nohup日志怎样轮转

小樊
37
2026-09-28 17:10:08
栏目: 智能运维

在 Debian 上,nohup 本身没有日志轮转功能,它只是把输出重定向到文件(默认 nohup.out)。日志轮转需要靠外部机制来做。

下面按“推荐程度”给你几种常用方案。


一、最推荐:用 logrotate(系统级,标准做法)

1. 示例:轮转 nohup.out

假设你这样启动程序:

nohup /opt/app/run.sh > /var/log/app/nohup.out 2>&1 &

创建 logrotate 配置:

sudo vim /etc/logrotate.d/app

内容:

/var/log/app/nohup.out {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    copytruncate
    notifempty
}

2. 关键点说明

  • copytruncate ✅ 必须
    • nohup 进程不会重新打开日志文件
    • copytruncate = 拷贝后清空原文件,不中断进程
  • daily / weekly:轮转周期
  • rotate 7:保留 7 份
  • compress:压缩旧日志

3. 手动测试

sudo logrotate -f /etc/logrotate.d/app

二、启动时就避免 nohup.out(更好)

方案 A:直接重定向 + logrotate

nohup ./app > /var/log/app/app.log 2>&1 &

然后用上面的 logrotate 配置。


方案 B:用 systemd(最优雅,推荐长期运行)

如果你能改成 systemd 服务:

[Unit]
Description=My App

[Service]
ExecStart=/opt/app/run.sh
StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/app.log
Restart=always

[Install]
WantedBy=multi-user.target

然后:

sudo systemctl enable app
sudo systemctl start app

logrotate 同样可用,且支持 postrotate 重载。


三、简单脚本轮转(不推荐但可用)

#!/bin/bash
mv nohup.out nohup.out.$(date +%F)
kill -USR1 $(pidof yourapp)

⚠️ 仅当程序支持信号重新打开日志时才可用
❌ nohup 默认不支持


四、总结建议

方式 推荐度 说明
logrotate + copytruncate ⭐⭐⭐⭐⭐ 最简单稳定
systemd + logrotate ⭐⭐⭐⭐⭐ 长期运行最佳
nohup.out 原生 ⭐ 不轮转,会爆盘

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

  • 你的启动命令
  • 日志路径
  • 是否是长期服务

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

0 踩