温馨提示×

debian nohup日志怎么开启

小樊
43
2026-10-28 09:50:53
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)里,nohup 本身不“管理”日志,它只是让进程忽略 SIGHUP 并在退出终端后继续运行。日志能否产生,取决于你启动的命令本身以及你如何重定向输出。

下面按常见场景说明。


一、nohup 默认日志行为

最基础的用法:

nohup your_command &

效果:

  • 标准输出(stdout)和标准错误(stderr)默认写入当前目录的 nohup.out
  • 如果当前目录不可写,会写到 $HOME/nohup.out

查看日志:

tail -f nohup.out

二、手动指定日志文件(推荐)

1. 只记录标准输出

nohup your_command > app.log 2>&1 &

说明:

  • >:重定向 stdout
  • 2>&1:把 stderr 也合并进来
  • &:后台运行

2. 分别记录 stdout / 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(见下)。


四、用 logrotate 管理 nohup 日志(生产推荐)

示例:你的日志是 /var/log/myapp.log

1. 创建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

内容示例:

/var/log/myapp.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

copytruncate 对 nohup 进程非常重要,避免重启进程。

2. 测试

sudo logrotate -d /etc/logrotate.d/myapp

五、更现代的做法(强烈推荐)

如果服务长期运行,不要用 nohup,而是:

systemd(Debian 官方推荐)

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

✅ 自动日志
✅ 自动重启
✅ 权限安全


六、常见问题

Q1:nohup.out 没有内容?

  • 程序可能没输出
  • 输出被缓冲(Python 可加 -u)
nohup python -u app.py > app.log 2>&1 &

Q2:nohup 进程死了日志也没了?

  • 用 >> 而不是 >(追加)
  • 或用 systemd

总结

方式 是否推荐 说明
nohup + nohup.out ❌ 临时用
nohup + 重定向 ⚠️ 简单任务
nohup + logrotate ✅ 长期脚本
systemd ✅✅ 生产环境

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

  • 跑的是什么程序(Python / Java / shell)
  • 是否是服务器长期运行

我可以给你最合适的日志方案。

0 踩