在 CentOS 上,nohup 本身只是“忽略 HUP 信号 + 后台运行”,日志管理主要靠重定向和日志轮转。下面按常见场景给你一个完整、实用的说明。
nohup command &
默认会生成:
nohup.out
在当前目录(或 $HOME 下)
⚠️ 问题:
nohup command > app.log 2>&1 &
或分开:
nohup command > app.log 2> app.err &
✅ 这是最常用、最推荐的方式
nohup command > /dev/null 2>&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除非程序支持
logrotate -vf /etc/logrotate.d/myapp
0 0 * * * mv app.log app.log.$(date +\%Y\%m\%d)
⚠️ 缺点:
✅ 推荐组合
nohup command > app.log 2>&1 &
配合:
logrotate + copytruncate
✅ 生产环境建议
| 场景 | 建议 |
|---|---|
| 长期运行 | logrotate |
| 临时任务 | nohup + 重定向 |
| 服务 | systemd(见下) |
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)
✅ 可以删,但 先确认程序是否还在写
lsof | grep nohup.out
可能是:
-u)copytruncate如果你愿意,可以告诉我:
我可以给你 定制的 nohup + 日志方案 ✅