nohup 本身不负责写日志、也不改时间,它只是让进程忽略 SIGHUP 并可选地把输出重定向到 nohup.out。
所以“nohup 日志时间错乱”通常不是 nohup 的问题,而是下面几类原因之一:
程序写日志用的是自己认为的时区,而你看日志用的是系统/本地时区。
典型表现:
常见原因:
time.Now().UTC()(Go)-Duser.timezone=Asia/Shanghailogging 使用 UTC✅ 排查:
date
echo $TZ
很多程序(尤其是 Python / Java / C++)标准输出是带缓冲的:
结果:
✅ 解决方式:
python -u app.py
-Djava.stdout.encoding=UTF-8
stdbuf:stdbuf -oL nohup python app.py > log 2>&1 &
✅ 表现:
✅ 解决:
nohup.out以下情况会导致日志时间“跳变”:
date -s 改过时间✅ 排查:
timedatectl
journalctl | grep time
如果你:
nohup.out会出现:
✅ 建议:
nohup xxx > app_$(date +%F_%H%M).log 2>&1 &
ls -l nohup.out 显示的是文件最后写入时间,不是日志发生时间。
✅ 区分:
nohup 不会让日志时间错乱,错乱来自:时区、缓冲、多进程写、系统时间变化或日志文件混用。
如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一种。