温馨提示×

centos nohup日志为何有乱码

小樊
49
2026-09-03 03:38:28
栏目: 智能运维

在 CentOS 上使用 nohup 运行程序时,日志出现乱码,通常不是 nohup 本身的问题,而是字符编码不一致导致的。下面按最常见原因逐一说明:


一、最常见原因:终端 / 系统编码不一致

1. 系统或终端不是 UTF-8

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)会按自身默认编码输出

  • Java 默认:UTF-8(有时是 ISO-8859-1
  • Python2 默认:ASCII
  • Python3 默认:UTF-8

如果程序用 GBK 输出,而日志文件按 UTF-8 看,就会乱码。

示例(Python)

print("中文")

若系统不是 UTF-8,可能乱码。

解决方式:

  • Java:
nohup java -Dfile.encoding=UTF-8 -jar app.jar > log.out 2>&1 &
  • Python:
nohup python3 app.py > log.out 2>&1 &

三、用错误工具查看日志

错误做法

  • cat + 非 UTF-8 终端
  • Windows 记事本直接打开

推荐做法

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

五、SSH 客户端编码问题(非常常见)

即使服务器正常,客户端也可能乱码:

  • Xshell:
    属性 → 终端 → 编码 → UTF-8
  • SecureCRT:
    Session Options → Terminal → Appearance → UTF-8
  • PuTTY:
    Window → Translation → UTF-8

六、快速自检清单 ✅

  1. locale 是否为 UTF-8
  2. 程序是否指定编码
  3. 终端是否 UTF-8
  4. 日志查看工具是否正确
  5. 是否 Windows 记事本直接打开

七、一个“万能”安全启动示例

export LANG=zh_CN.UTF-8
nohup java -Dfile.encoding=UTF-8 -jar app.jar > app.log 2>&1 &

如果你愿意,可以:

  • 贴出 乱码截图
  • 或说明 什么程序(Java / Python / Shell)
  • 或贴出 localenohup 启动命令

我可以更精准定位原因。

0