在 CentOS 上使用 nohup 时,日志“丢失”通常不是真的被删除了,而是被重定向方式、系统机制或运维策略“藏起来/截断/覆盖”了。下面按最常见原因 → 排查方法 → 解决建议来说明。
典型错误写法:
nohup ./app.sh
这样只会:
nohup.out如果终端关闭或程序异常,你可能误以为“日志没了”。
✅ 正确写法:
nohup ./app.sh > app.log 2>&1 &
或
nohup ./app.sh >> app.log 2>&1 &
nohup.out 默认生成在“执行命令时的当前目录”
常见误区:
/root 执行,但你去 /home 找systemd / cron 启动时,当前目录是 / 或 /root查找:
find / -name nohup.out 2>/dev/null
如果你用的是 > 而不是 >>:
nohup ./app.sh > app.log &
下次启动会清空日志
✅ 始终用:
>> app.log 2>&1
很多程序(Java / Python / Go):
logging / log4jnohup.out 里几乎没有内容✅ 检查程序自身日志目录,而不是 nohup.out
如果你是通过:
crontabsystemctlssh xxx "nohup ..."那么:
SIGHUP 逻辑不同journalctl查看:
journalctl -u your-service
日志“写不进去”
检查:
df -h
df -i
CentOS 默认 logrotate 会:
例如:
app.log → app.log.1.gz
如果进程:
你可能只看到空文件
检查:
echo $?
dmesg | tail
nohup ./app.sh >> /data/logs/app.log 2>&1 &
nohup ./app.sh >> /data/logs/app_$(date +%F).log 2>&1 &
[Service]
ExecStart=/opt/app/app.sh
StandardOutput=append:/data/logs/app.log
StandardError=append:/data/logs/app.log
你可以回答我这几个问题,我可以直接帮你定位:
nohup 直接跑,还是 systemctl / cron?nohup.out 还是自定义文件?我可以根据你的实际情况精准指出“为什么丢了”。