我编写了一个简单的 bash 脚本,通过 ssh 连接到 3 个主机(2 个远程主机,1 个我自己的主机用于测试),并运行一个长时间运行的 gui 程序,该程序将文本输出到我想要记录的终端。
#!/bin/bash
ssh -f -X user@remote1 '(python -u long_running_program.py &> ~/log1.txt)'
ssh -f -X user@remote2 '(python -u long_running_program.py &> ~/log2.txt)'
ssh -f -X user@localhost '(python -u long_running_program.py &> ~/log3.txt)'
multitail -s 3 ~/log*
由上可知,使用f参数调用ssh在后台运行并允许脚本继续执行。在远程服务器上,使用无缓冲开关调用 python 程序,并将输出重定向到日志文件(请注意,远程和本地计算机的主目录都位于网络安装的驱动器上,因此使用 ~ 会在所有计算机上提供相同的路径)其中)。
上述技术在技术上是可行的,但是来自远程计算机的 2 个日志(log1、log2)更新速度非常慢。文件更新可能需要 20 秒以上(无论您是否使用 multitail、vi 等查看文件),而本地日志文件 (log3) 更新是立即的。
为了确认这种情况不会发生,我可以手动 ssh 进入远程并运行程序,而不将输出重定向到文件。正如预期的那样,输出连续无延迟地流式传输。我还尝试了各种方法,例如尝试关闭缓冲和使用脚本/tee/等,但均无济于事。
有谁知道是什么原因造成的和/或如何解决它?
答案1
我建议使用噗噗它是专门为执行多个并行 SSH 会话而设计的,而不是同时运行多个串行 SSH 命令。
例如,
pssh -i -H user@remote1 -H user@remote2 -H user@localhost '(python -u long_running_program.py &> ~/log$PSSH_NODENUM.txt)'