温馨提示×

centos nohup日志为何被覆盖

小樊
41
2026-09-30 08:06:23
栏目: 智能运维

在 CentOS(以及大多数 Linux 系统)中,nohup 日志被覆盖通常不是 nohup 本身的问题,而是重定向方式或执行方式导致的。下面按最常见原因逐一说明。


一、最常见原因:> 覆盖重定向

你很可能用了类似下面的命令:

nohup python app.py > log.txt &

或

nohup ./start.sh > output.log 2>&1 &

原因

  • > 是覆盖写入
  • 每次启动程序,都会清空原日志文件

所以:

  • 第一次启动:写日志
  • 第二次启动:日志被清空再写

✅ 结果:看起来像“日志被覆盖”


二、正确做法:使用 >> 追加日志

nohup python app.py >> log.txt 2>&1 &

或

nohup ./start.sh >> output.log 2>&1 &

说明

  • >>:追加写入
  • 2>&1:标准错误也写入日志
  • &:后台运行

✅ 日志不会丢失


三、nohup 默认日志行为(容易误解)

如果你没有指定重定向:

nohup python app.py &

CentOS 默认会:

  • 生成 nohup.out
  • 如果已存在,会追加写入

⚠️ 但很多人手动指定了 > log.txt,反而导致覆盖。


四、多次启动同一程序(很常见)

例如:

nohup app >> log.txt &
nohup app >> log.txt &
  • 日志没被覆盖
  • 但内容混杂
  • 看起来像“日志不对 / 被清了”

✅ 建议:

  • 每次启动用不同日志
nohup app >> log_$(date +%F_%T).txt &

五、日志被外部工具清空

以下情况也可能“看起来像覆盖”:

1. logrotate

CentOS 默认可能配置:

/var/log/nohup.out
  • 自动切割
  • 旧日志被重命名或清空

2. 定时任务

> log.txt

或

rm log.txt

六、推荐生产做法(稳健)

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

配合:

  • logrotate
  • 或 supervisor / systemd

总结一句话

CentOS 中 nohup 日志“被覆盖”,99% 是因为用了 > 而不是 >>

如果你愿意,可以把你用的具体命令贴出来,我可以直接帮你改正确。

0 踩