温馨提示×

centos nohup日志怎么管理

小樊
46
2026-08-04 09:22:54
栏目: 智能运维

CentOS 上,nohup 本身只是“忽略 HUP 信号 + 后台运行”,日志管理主要靠重定向和日志轮转。下面按常见场景给你一个完整、实用的说明。


一、nohup 默认日志行为

nohup command &

默认会生成:

nohup.out

在当前目录(或 $HOME 下)

⚠️ 问题:

  • 不会自动切割
  • 文件会无限增长
  • 容易把磁盘写满

二、推荐做法:手动指定日志文件

1️⃣ 重定向 stdout / stderr

nohup command > app.log 2>&1 &

或分开:

nohup command > app.log 2> app.err &

✅ 这是最常用、最推荐的方式


2️⃣ 不记录日志(丢弃)

nohup command > /dev/null 2>&1 &

适合不需要日志的程序


三、日志轮转(非常重要)

✅ 方法一:使用 logrotate(生产推荐)

1. 创建 logrotate 配置文件

sudo vi /etc/logrotate.d/myapp

示例:

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

含义:

  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:✅ 适合 nohup 程序(不会重启)

❗ 不要用 postrotate kill -HUP 除非程序支持

2. 测试

logrotate -vf /etc/logrotate.d/myapp

✅ 方法二:用 cron + 脚本(简单粗暴)

0 0 * * * mv app.log app.log.$(date +\%Y\%m\%d)

⚠️ 缺点:

  • 程序可能继续写旧 fd
  • 不如 logrotate 稳定

四、nohup + 日志管理最佳实践(总结)

推荐组合

nohup command > app.log 2>&1 &

配合:

logrotate + copytruncate

生产环境建议

场景 建议
长期运行 logrotate
临时任务 nohup + 重定向
服务 systemd(见下)

五、如果可以:用 systemd(比 nohup 更好)

CentOS 7+ 强烈推荐:

[Unit]
Description=My App

[Service]
ExecStart=/usr/bin/python app.py
Restart=always
StandardOutput=append:/var/log/myapp.log
StandardError=append:/var/log/myapp.log

[Install]
WantedBy=multi-user.target

日志由 systemd 管理,自动轮转(journalctl)


六、常见问题

Q1:nohup.out 能删吗?

✅ 可以删,但 先确认程序是否还在写

lsof | grep nohup.out

Q2:nohup 程序日志不更新?

可能是:

  • 日志被缓冲(Python 加 -u
  • 没有 copytruncate
  • 日志路径不对

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

  • CentOS 版本
  • 运行的是什么程序(Java / Python / Shell)
  • 是否生产环境

我可以给你 定制的 nohup + 日志方案

0