nohup 日志没有生成,通常不是命令本身的问题,而是输出没被重定向或程序没真正运行。下面按常见原因逐一排查。
nohup 默认只把 stdout 重定向到 nohup.out,但前提是:
例如下面不会生成 nohup.out:
nohup ./my.sh
如果 my.sh 里没有 echo 或 printf,就不会生成日志。
✅ 推荐写法:
nohup ./my.sh > my.log 2>&1 &
nohup ./my.sh > /dev/null 2>&1 &
✅ 这种一定不会生成日志
检查是否真的在运行:
ps -ef | grep my.sh
常见失败原因:
chmod +x my.sh
#!/bin/bash
nohup /full/path/my.sh > my.log 2>&1 &
nohup.out 生成在命令执行时的当前目录:
pwd
ls -l nohup.out
如果你后来 cd 走了,就会找不到。
✅ 建议:
nohup ./my.sh > /var/log/my.log 2>&1 &
例如:
cd /root
nohup some_cmd &
普通用户可能写不了 /root
✅ 解决:
nohup ./my.sh > /tmp/my.log 2>&1 &
这些环境 不会自动生成 nohup.out
✅ 必须显式重定向:
nohup /app/start.sh > /app/log/start.log 2>&1 &
你可以逐条对照:
/dev/null?nohup /path/to/program > program.log 2>&1 &
查看日志:
tail -f program.log
如果你愿意,可以把**你执行的完整命令 + 运行环境(服务器 / Docker / crontab)**贴出来,我可以帮你精准定位是哪一条原因。