在 CentOS 上使用 nohup 运行程序时日志出现乱码,通常不是 nohup 本身的问题,而是字符编码不一致导致的。常见原因和解决办法如下:
UTF-8GBK / GB2312 / ASCII现象:
nohup python app.py > app.log 2>&1 &
cat app.log # 中文乱码
解决: 查看当前编码
echo $LANG
locale
若不是 UTF-8,可临时设置:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
再重新启动程序:
nohup python app.py > app.log 2>&1 &
有些程序(尤其是 Java / 老系统):
GBKUTF-8 读解决方式(以 Java 为例):
nohup java -Dfile.encoding=UTF-8 -jar app.jar > app.log 2>&1 &
Python 示例:
nohup python -u app.py > app.log 2>&1 &
(加 -u 防止缓冲导致日志错乱)
cat / less / vim 查看方式不对不同工具对编码处理不同:
file app.log
如果是 ISO-8859 或 GBK:
iconv -f GBK -t UTF-8 app.log > app_utf8.log
或用 vim:
vim app.log
:set fileencoding=utf-8
如果你用:
检查客户端编码:
否则:
✅ 重点说明:
nohup只是“忽略挂断信号 + 重定向输出”,不会修改字符编码
乱码 100% 是:
三者不一致造成的。
echo $LANG
locale
file nohup.out
cat nohup.out
如果你愿意,可以把:
locale 输出发出来,我可以直接帮你定位是哪一层编码出问题。