codingknob
codingknob

Reputation: 11680

EC2 ssh broken pipe terminates running process

I'am using a EC2 instance to run a large job that I estimate to take approx 24 hours to complete. I get the same issue described here ssh broken pipe ec2

I followed the suggestion/solutions in the above post and in my ssh session shell I launched my python program by the following command:

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

Once I did this the connection remained intact longer than if I didn't use the nohup but it eventually fails with broken pipe error and I'm back to square one. The process 'python myapplication.py' is terminated as a result.

Any ideas on what is happening and what I can do to prevent this from occuring?

Upvotes: 13

Views: 15071

Answers (3)

Brian Leishman
Brian Leishman

Reputation: 8565

I actually ended up fixing this accidentally with a router configuration, allowing all ICMP packets. I allowed all ICMP packets to diagnose a strange issue with some websites loading slowly randomly, and I noticed none of my SSH terminals died anymore.

I'm using a Ubiquiti EdgeRouter 4, so I followed this guide here https://community.ubnt.com/t5/EdgeRouter/EdgeRouter-GUI-Tutorial-Allow-ICMP-ping/td-p/1495130

Of course you'll have to follow your own router's unique instructions to allow ICMP through the firewall.

Upvotes: 2

Blake
Blake

Reputation: 316

You should try screen.

Install

Ubuntu:

apt-get install screen

CentOS:

yum install screen

Usage

Start a new screen session by

$> screen

List all screen sessions you had created

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

Next, restore your screen

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

Upvotes: 20

Kevin L. Keys
Kevin L. Keys

Reputation: 995

A simple solution is to send the process to the background by appending an ampersand & to your command:

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

The process will continue to run even if you close your SSH session. You can always check progress by grabbing the tail of your output files:

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

Upvotes: 5

Related Questions