nohup 日志出现乱码,通常不是 nohup 本身的问题,而是字符编码不一致或终端环境不匹配导致的。下面按常见原因给你系统排查一下。
比如:
结果就是乱码。
✅ 验证方式
file nohup.out
如果看到 ISO-8859、ASCII、GBK 等字样,说明编码不一致。
✅ 解决方式 统一编码为 UTF‑8:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
然后重新运行:
nohup java -jar app.jar > nohup.out 2>&1 &
nohup 启动时会继承当前 shell 的环境变量,如果当前 shell 编码不对,日志就会乱码。
✅ 建议做法 在启动脚本里显式指定编码:
nohup java -Dfile.encoding=UTF-8 -jar app.jar > nohup.out 2>&1 &
(Java 程序尤其常见)
nohup ./app | tee nohup.out &
管道 + nohup 容易破坏编码环境。
✅ 推荐写法
nohup ./app > nohup.out 2>&1 &
vim nohup.out
:set fileencoding
如果是 latin1 / gb2312,可以:
:set encoding=utf-8
或从终端直接看:
cat nohup.out
比如:
✅ 检查日志框架配置:
logback.xml
<encoder>
<pattern>%d %p %c - %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
你可以按顺序确认:
echo $LANG 是否 UTF‑8-Dfile.encoding=UTF-8nohup.out 是否用 cat 查看nohup 不负责编码,它只是把 stdout/stderr 写进文件。
乱码 99% 是:程序编码 ≠ 终端编码。
如果你愿意,可以把:
echo $LANG发出来,我可以直接帮你定位到具体原因。