当 ssh 登录到远程终端(“agetty”)时随机发生时,会立即将不相关的字符输出到该 ssh 会话终端中。
周期性重复时,这些是“hh��cahh�”或“hh��!ca[”和“CR”“LF”。
此外,无法复制和粘贴某些字符(到目前为止已识别为:$“),因为在这些字符之后(并包括这些字符)没有输出到终端。
自从认识到这个 Debian 发行版的困难以来,系统配置文件没有发生任何变化。一些不规则的输出问题可以通过以下方法解决(对于分钟耐力)
stty sane
如何调试此编码(?)问题的原因以及如何获取 pid 的进程描述或程序名称(strace -fe write $(lsof -t "/proc/$$/fd/1" | sed 's/^/-p/'
ps | grep $pid
-> 导致此输出到标准输出的进程的单独进程/程序已关闭?
答案1
通过同步主机和客户端之间的时间基准并观察一段时间的输出,在定义的时间段内重复 tty 输出的模式更有可能指向 cron 服务。
然后将该二进制文件的输出(stdout、stderr)重定向到/dev/空相反,到本地日志文件中,这种对 tty 的编码干扰消失了(使用service cron reload
, service cron restart
)。
虽然仍然没有解释,为什么终端会话的编码变得不可用(使用打字交互),以下更改解决了编码问题:
cron 配置文件(tty 内的编码问题):
*29 * * * * /path_to_executable/binary > /shared_memory_tmpfs/log.file
- printf("将输出记录到标准输出");
- 如果这是该二进制文件的多个实例,则删除 log.file
cron 配置文件(问题已解决):
*29 * * * * /path_to_executable/binary > /dev/null 2>&1
- fprintf("将输出记录到 log.file");
- 删除并重新打开 log.file,在此倍增的二进制实例将内容记录到其中之前
困难在于识别此 tty 输出的来源,因为重定向的输出在每个重新启动的进程的每次递归中都被清除,并且只有启动时的短暂时间才会导致一些字符扰乱所有其他后续 tty 输出(特别是行向前和光标的格式)可见性,独立于登录事件)。
一旦查明了原因,解决问题就不难了。无论如何,对其背后原因的解释将会很有趣。