在 CentOS 上使用 nohup 运行程序时,日志出现乱码,通常不是 nohup 本身的问题,而是字符编码不一致导致的。下面按最常见原因逐一说明:
CentOS 默认应使用 UTF-8,但如果环境被改过,就可能乱码。
查看当前编码:
locale
正常应是:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果不是,可临时设置:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
永久生效(CentOS 7):
localectl set-locale LANG=zh_CN.UTF-8
很多程序(尤其是 Java、Python、Go)会按自身默认编码输出:
UTF-8(有时是 ISO-8859-1)ASCIIUTF-8如果程序用 GBK 输出,而日志文件按 UTF-8 看,就会乱码。
print("中文")
若系统不是 UTF-8,可能乱码。
解决方式:
nohup java -Dfile.encoding=UTF-8 -jar app.jar > log.out 2>&1 &
nohup python3 app.py > log.out 2>&1 &
cat + 非 UTF-8 终端less log.out
或
tail -f log.out
并确认终端是 UTF-8(如 SecureCRT、Xshell、iTerm 都需设置)。
你写的可能是:
nohup xxx > nohup.out &
这不会转码,只是把输出写文件。
如果程序输出是 GBK:
iconv -f GBK -t UTF-8 nohup.out
即使服务器正常,客户端也可能乱码:
locale 是否为 UTF-8export LANG=zh_CN.UTF-8
nohup java -Dfile.encoding=UTF-8 -jar app.jar > app.log 2>&1 &
如果你愿意,可以:
locale 和 nohup 启动命令我可以更精准定位原因。