nohup 日志写入失败通常不是 nohup 本身的问题,而是权限、路径、重定向方式或运行环境导致的。下面按常见原因逐一说明,并给出排查建议。
nohup ./app > /root/app.log 2>&1 &
如果你当前用户不是 root,却往 /root/ 写文件,就会失败。
✅ 排查:
ls -ld /root
touch /root/app.log
✅ 解决:
nohup ./app > ./app.log 2>&1 &
chmod 755 /your/log/dir
nohup 运行后,工作目录可能不是你以为的那个。
❌ 错误示例:
nohup ./app > logs/app.log &
但 logs/ 目录不存在。
✅ 排查:
ls -l logs
pwd
✅ 解决:
nohup ./app > /data/logs/app.log 2>&1 &
日志写不进去,但程序可能还在跑。
✅ 排查:
df -h
✅ 解决:
即使磁盘还有空间,inode 满了也无法创建文件。
✅ 排查:
df -i
✅ 解决:
默认 nohup 只把 stdout 写进 nohup.out,stderr 可能丢失。
✅ 推荐写法:
nohup ./app > app.log 2>&1 &
或分开:
nohup ./app > app.log 2> error.log &
如果你删除了 nohup.out,但进程没重启,日志不会再写入新文件。
✅ 排查:
lsof | grep nohup.out
✅ 解决:
有些程序:
✅ 验证:
./app
看是否有输出。
✅ 解决:
-Dlogging.file)很多语言(Python / Java / C++)会缓冲 stdout。
❌ 现象:程序在跑,但日志文件一直是空的。
✅ 解决:
python -u app.py
-Djansi.force=true
setbuf(stdout, NULL);
ulimit -f
ulimit -n
✅ 解决:
ulimit -f unlimited
你可以按顺序检查:
2>&1nohup ./app > /data/logs/app.log 2>&1 &
并确认:
tail -f /data/logs/app.log
如果你愿意,可以把**具体命令 + 报错信息 + 系统环境(Linux 发行版)**贴出来,我可以直接帮你定位是哪一条原因。