温馨提示×

nohup日志没生成为何

小樊
37
2026-08-20 09:06:28
栏目: 编程语言

nohup 日志没有生成,通常不是命令本身的问题,而是输出没被重定向程序没真正运行。下面按常见原因逐一排查。


一、最常见原因:输出没被重定向

1️⃣ 没有重定向 stdout / stderr

nohup 默认只把 stdout 重定向到 nohup.out,但前提是:

  • 程序真的有输出
  • 没有人为关闭输出
  • 没有重定向到其他地方

例如下面不会生成 nohup.out

nohup ./my.sh

如果 my.sh 里没有 echoprintf,就不会生成日志。

✅ 推荐写法:

nohup ./my.sh > my.log 2>&1 &

2️⃣ 输出被重定向到 /dev/null

nohup ./my.sh > /dev/null 2>&1 &

✅ 这种一定不会生成日志


二、程序根本没运行

3️⃣ 程序启动失败(最常见)

检查是否真的在运行:

ps -ef | grep my.sh

常见失败原因:

  • 没有执行权限
chmod +x my.sh
  • 脚本第一行 shebang 错误
#!/bin/bash
  • 路径不对
nohup /full/path/my.sh > my.log 2>&1 &

三、nohup.out 生成位置不对

4️⃣ nohup.out 不在你以为的目录

nohup.out 生成在命令执行时的当前目录

pwd
ls -l nohup.out

如果你后来 cd 走了,就会找不到。

✅ 建议:

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

四、权限问题

5️⃣ 当前目录不可写

例如:

cd /root
nohup some_cmd &

普通用户可能写不了 /root

✅ 解决:

nohup ./my.sh > /tmp/my.log 2>&1 &

五、被 systemd / 容器 / 脚本吞掉输出

6️⃣ 在 crontab / systemd / Docker 中

这些环境 不会自动生成 nohup.out

✅ 必须显式重定向:

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

六、快速自检清单 ✅

你可以逐条对照:

  • [ ] 程序是否真的在运行?
  • [ ] 是否有 stdout / stderr 输出?
  • [ ] 是否重定向到了 /dev/null
  • [ ] 当前目录是否可写?
  • [ ] 是不是在 crontab / systemd / Docker 里?
  • [ ] 是否用了绝对路径?

七、推荐的标准写法 ✅

nohup /path/to/program > program.log 2>&1 &

查看日志:

tail -f program.log

如果你愿意,可以把**你执行的完整命令 + 运行环境(服务器 / Docker / crontab)**贴出来,我可以帮你精准定位是哪一条原因。

0