EC2 ssh broken pipe 终止 运行 进程

EC2 ssh broken pipe terminates running process

我正在使用 EC2 实例 运行 我估计需要大约 24 小时才能完成的大型作业。我遇到了此处描述的相同问题 ssh broken pipe ec2

我在上面 post 中遵循了 suggestion/solutions 并且在我的 ssh 会话中 shell 我通过以下命令启动了我的 python 程序:

nohup python myapplication.py > myprogram.out 2>myprogram.err

一旦我这样做了,连接保持完整的时间比我不使用 nohup 的时间长,但它最终因 broken pipe error 而失败,我回到了原点。进程“python myapplication.py”因此终止。

关于正在发生的事情以及我可以做些什么来防止这种情况发生的任何想法?

你应该试试 screen.

安装

Ubuntu:

apt-get install screen

CentOS:

yum install screen

用法

通过

开始新的屏幕会话
$> screen

列出您创建的所有屏幕会话

$>screen -ls
There is a screen on:
        23340.pts-0.2yourserver    (Detached)
1 Socket in /var/run/screen/S-root.

接下来,恢复您的屏幕

$> screen -R 23340
$> screen -R <screen-id>

一个简单的解决方案是通过在您的命令中附加一个符号 & 将进程发送到后台:

nohup python myapplication.py > myprogram.out 2>myprogram.err &

即使您关闭 SSH 会话,该过程也会继续 运行。您始终可以通过抓取输出文件的尾部来检查进度:

tail -n 20 myprogram.out
tail -n 20 myprogram.err

实际上我最终通过路由器配置意外修复了这个问题,允许所有 ICMP 数据包。我允许所有 ICMP 数据包诊断一个奇怪的问题,一些网站随机加载缓慢,我注意到我的 SSH 终端 none 死了。

我使用的是 Ubiquiti EdgeRouter 4,所以我遵循了这里的指南 https://community.ubnt.com/t5/EdgeRouter/EdgeRouter-GUI-Tutorial-Allow-ICMP-ping/td-p/1495130

当然,您必须按照自己路由器的独特说明来允许 ICMP 通过防火墙。

在我看来,如果这是一个需要一个多小时的过程,这里的解决方案可能会更好 https://forums.aws.amazon.com/message.jspa?messageID=914326