在 Debian 上使用 nohup 时日志出现乱码,通常不是 nohup 本身的问题,而是字符编码不一致或终端环境差异导致的。下面按常见原因给你梳理一下。
✅ 验证方式:
file nohup.out
locale
✅ 解决: 统一使用 UTF-8:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
然后重新启动程序:
nohup your_program > nohup.out 2>&1 &
nohup 启动的程序没有终端,很多程序会根据 LANG / LC_* 决定编码。
nohup 后乱码✅ 解决(推荐):
nohup env LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 your_program > nohup.out 2>&1 &
Java 在无终端时经常使用:
US-ASCII / ISO-8859-1
✅ 解决:
nohup java -Dfile.encoding=UTF-8 -jar app.jar > nohup.out 2>&1 &
nohup python3 -u app.py > nohup.out 2>&1 &
并确保:
import sys
print(sys.getdefaultencoding())
是 utf-8
nohup command & > nohup.out # 实际没重定向
✅ 正确:
nohup command > nohup.out 2>&1 &
有些程序输出:
\r在 cat 或 vim 里看起来像乱码。
✅ 查看方式:
less -R nohup.out
或
cat -v nohup.out
即使服务器是对的,本地 SSH 客户端编码错也会乱码:
locale
file nohup.out
echo $LANG
cat -v nohup.out | head
如果你愿意,可以把:
locale 输出贴出来,我可以直接帮你定位是哪一种乱码。