在 Debian(以及大多数 Linux 发行版)里,nohup 本身不“管理”日志,它只是让进程忽略 SIGHUP 并在退出终端后继续运行。日志能否产生,取决于你启动的命令本身以及你如何重定向输出。
下面按常见场景说明。
最基础的用法:
nohup your_command &
效果:
nohup.out$HOME/nohup.out查看日志:
tail -f nohup.out
nohup your_command > app.log 2>&1 &
说明:
>:重定向 stdout2>&1:把 stderr 也合并进来&:后台运行nohup your_command > out.log 2> err.log &
nohup sh -c 'while true; do date; your_command; sleep 1; done' >> app.log 2>&1 &
但真正需要日志轮转,推荐用 logrotate(见下)。
示例:你的日志是 /var/log/myapp.log
sudo vim /etc/logrotate.d/myapp
内容示例:
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
copytruncate对 nohup 进程非常重要,避免重启进程。
sudo logrotate -d /etc/logrotate.d/myapp
如果服务长期运行,不要用 nohup,而是:
sudo vim /etc/systemd/system/myapp.service
[Unit]
Description=My App
[Service]
ExecStart=/path/to/your_command
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
查看日志:
journalctl -u myapp -f
✅ 自动日志
✅ 自动重启
✅ 权限安全
-u)nohup python -u app.py > app.log 2>&1 &
>> 而不是 >(追加)| 方式 | 是否推荐 | 说明 |
|---|---|---|
| nohup + nohup.out | ❌ | 临时用 |
| nohup + 重定向 | ⚠️ | 简单任务 |
| nohup + logrotate | ✅ | 长期脚本 |
| systemd | ✅✅ | 生产环境 |
如果你愿意,可以告诉我:
我可以给你最合适的日志方案。