在 Linux 下使用 nohup 运行程序时,日志出现编码异常(乱码、问号、方块等),通常不是 nohup 本身的问题,而是字符编码环境不一致导致的。下面按常见原因和解决办法来说明。
nohup 只是“忽略挂断信号 + 重定向输出”,它不会修改编码。
日志编码异常一般来自:
先查看当前环境:
locale
如果看到:
LANG=
LC_ALL=
或
zh_CN.GBK
推荐统一为 UTF-8:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
✅ 在 nohup 启动前设置:
LANG=en_US.UTF-8 \
LC_ALL=en_US.UTF-8 \
nohup your_app >> app.log 2>&1 &
nohup java -Dfile.encoding=UTF-8 -jar app.jar >> app.log 2>&1 &
nohup python3 -u app.py >> app.log 2>&1 &
Python 中确保:
import sys
sys.stdout.reconfigure(encoding='utf-8')
即使日志是 UTF-8,查看工具不对也会乱码。
less app.log
若乱码:
LESSCHARSET=utf-8 less app.log
:set encoding=utf-8
:set fileencoding=utf-8
iconv -f GBK -t UTF-8 app.log
如果你:
很可能导致:
解决:
dos2unix run.sh
iconv -f GBK -t UTF-8 run.sh -o run_utf8.sh
file app.log
输出示例:
app.log: UTF-8 Unicode text
app.log: ISO-8859 text
app.log: Non-ISO extended-ASCII text (GBK?)
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
nohup your_command >> app.log 2>&1 &
你可以补充:
locale 输出file 日志文件 输出我可以直接给你一条可复制的命令。