Prevent Write failed: Broken pipe problem during ssh session with screen command
There are times when you are away from you computer/terminal and come back later to find the ssh session or terminal window to another server become unresponsive and terminated with the error message :
Write failed: Broken pipe
Diagnostic :
Your terminal session may get closed due to various network issues. Such as your computer goes into sleep mode and cause the WiFI connection to drop. So you may want to increase the time before your computer go into sleep mode.
Solution :
Another solution will allow you to keep your ssh session even when the network connection is dropped is to use the screen
command. The screen
program is designed to allow programs started from the terminal to be separated from the original terminal shell and it also allows you to detach/attach terminal sessions. The only draw back is that you need to keep track of the screens PIDs on paper. However, if you are not running a lot of terminal sessions simultaneously you should be ok.
First : run
>screen -list
No Sockets found in /var/folders/nd/5m9x1vj4338yt1rg02zbph0000gn/T/.screen.
This means there are no screen attached.
Next :
>ssh root@remote-machine-hostname
to connect to your remote server. Run some command ... such as compiling a program source code or download huge file. Normally, if you encounter a "Broken pipe" error here... all your currently executing tasks that were invoked by the ssh
terminal will fail and you will have to start all over again when reconnected.
List the screen again
>screen -list
There is a screen on:
3673.ttys000.Sweets-Mac-Pro (Attached)
1 Socket in /var/folders/nd/5m9x1v_j4338y_t1rg02zbph0000gn/T/.screen.
as you can see, there is a screen attached to PID 3674. Next we will press Ctrl-A
+ D
buttons, this will cause the terminal to fall back to your local machine and you will see :
[detached]
and if you do a screen -list
again, the message will now be :
There is a screen on:
3673.ttys000.Sweets-Mac-Pro (Detached)
1 Socket in /var/folders/nd/5m9x1v_j4338y_t1rg02zbph0000gn/T/.screen.
This is as good as having a network disconnection issue. However, the command that you executed on the remote is still running!
Finally :
Let say you manage to get the network disconnection issue fixed and want to reconnect back. Just execute
>screen -r
or
>screen -r 3673
if you know the PID.
and instantly you will reconnect back to the remote server without having to deal with unresponsive terminal and Write failed: Broken pipe
error.
Cool! I'm starting to like this screen
program!
Reference :
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+5k Golang : Return multiple values from function
+45.6k Golang : Marshal and unmarshal json.RawMessage struct example
+10.9k Use systeminfo to find out installed Windows Hotfix(s) or updates
+13.2k Golang : Convert spaces to tabs and back to spaces example
+15.4k Golang : Read large file with bufio.Scanner cause token too long error
+8.5k Golang : Build and compile multiple source files
+12.1k Android Studio : Highlight ImageButton when pressed on example
+28.6k Golang : Get first few and last few characters from string
+13.1k Golang : How to get year, month and day?
+8.6k Golang : io.Reader causing panic: runtime error: invalid memory address or nil pointer dereference
+15.9k Golang : Generate QR codes for Google Authenticator App and fix "Cannot interpret QR code" error