温馨提示×

debian怎么切割nohup日志

小樊
45
2026-09-22 20:06:55
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)里,nohup 本身不会自动切割日志,它只是把程序输出重定向到文件(通常是 nohup.out)。
要“切割 nohup 日志”,常见有 3 种做法,从简单到规范依次是:


一、最简单:手动或脚本切割(不推荐长期)

1. 手动清空 / 备份

cp nohup.out nohup.out.20260121
> nohup.out

⚠️ 注意:不要用 rm nohup.out,否则程序可能继续写“已删除文件”,磁盘不释放。


二、用 logrotate(✅ 推荐,系统级标准方案)

1. 假设日志路径

/var/log/myproject/nohup.out

2. 新建 logrotate 配置

sudo vim /etc/logrotate.d/myproject

内容示例:

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

关键参数说明

  • copytruncate最重要,适合 nohup 程序(不重启进程)
  • daily:每天切
  • rotate 7:保留 7 份
  • compress:压缩旧日志

3. 测试

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

这是最稳妥的方式


三、启动时就避免 nohup.out(更好做法)

1. 自己指定日志文件

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

然后用 logrotate 管理 app.log


2. 使用 systemd(✅ 最推荐,生产环境)

写成 service:

[Unit]
Description=My App

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

[Install]
WantedBy=multi-user.target

然后:

journalctl -u myapp

systemd 自动管理日志。


四、常见坑提醒

❌ 不要:

rm nohup.out

✅ 要:

> nohup.out

copytruncate


总结建议

场景 推荐方式
临时测试 > nohup.out
长期运行 logrotate + copytruncate
生产服务 systemd

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

  • nohup 启动命令
  • 日志路径
  • 是否服务器长期运行

我可以直接帮你写完整配置。

0