You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PM2运行SSH服务器时颜色丢失的原因排查

PM2导致SSH服务器颜色输出丢失的问题解析及解决办法

问题根源

PM2默认会把进程的stdout/stderr重定向到日志文件,而非交互式的管道或文件流不支持ANSI颜色控制码。chalk这类着色库会自动检测输出环境是不是TTY(终端设备),如果判定不是,就会自动关掉颜色输出——哪怕你设置了FORCE_COLOR,也可能因为PM2没把环境变量正确传递给子进程而失效。

另外,PM2启动进程时默认不给子进程分配TTY终端,这直接导致chalk检测不到终端环境,自然就不会输出颜色了。

解决办法

1. 启动PM2时强制分配TTY

启动命令加--tty参数,让PM2给子进程创建伪终端,这样chalk就能识别到TTY环境,正常输出颜色:

pm2 start your-server-script.ts --interpreter ts-node --tty

2. 代码里强制chalk开启着色

直接在代码里设置chalk的level属性,跳过环境检测,强制开启颜色:

import chalk from 'chalk';

// 3代表真彩色,0=关闭,1=基础色,2=256色,按需选择
chalk.level = 3;

3. PM2配置文件里指定环境变量

如果用ecosystem.config.js这类配置文件,在env里明确设置FORCE_COLOR,同时可选开启tty:

module.exports = {
  apps: [{
    name: 'ssh-server',
    script: 'your-server-script.ts',
    interpreter: 'ts-node',
    env: {
      FORCE_COLOR: '3',
      DEBUG_COLORS: 'true'
    },
    tty: true // 可选,配合TTY分配
  }]
};

注意事项

  • 查看PM2日志文件时,会看到类似\x1b[32m的颜色控制码文本,这是正常的——日志文件本身不解析ANSI码,但SSH客户端连接时应该能正常显示彩色内容。
  • 如果客户端还是看不到颜色,先确认你的终端支持ANSI颜色,再检查PM2日志里有没有输出对应的颜色控制码,确保服务器端确实生成了着色内容。

内容的提问来源于stack exchange,提问作者nullromo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:05:22