I need to run SSH commands remotely with the output displaying locally. But if the connection breaks I want the command to still run.
I am not talking so much about logging in and executing but doing ssh user@remotehost 'commands && command etc'
How can I ensure the command runs even if the connection breaks?
The best way to do this is using screen, which keeps the session open in a persistent way even if the connection dies (and if you want to start using it again you can do a
screen -r
and it will open it up again).Prefixing whatever command you want to run with
screen
(eg.ssh -t user@host screen command
) should do the job.If you want it to run in the background of the shell, you can also append an
&
to the whole thing.Are you looking to have a persistent session that you can resume, or just to stop a disconnect from killing the exection?
For the former, use
screen
, for the latter,nohup
.As mentioned early,
screen
can do all the trick. But not only what you need. I've use screen for the years and now use it every time I've login into systems. Try to installscreen
and create~/.screenrc
with such config:Then run
screen -Rd vcf
. That is the preferable invocation of screen. You will reconnect to previously created session with name vcf* (or be warned if ambiguous) or, if session not opened yet, it will be created. CTRL+A is a meta key that do everything.CTRL+A C
(CTRL+A, then C) create new window (screen) inside session.CTRL+A SPACE
move focus to the next window in a round.CTRL+A D
detach current session keeping all windows functional between connections. If you have launch some looooong task you can detach from screen and reattach to it later to see what happens. The same happens if your ssh session is lost - screen stay alive with all opened windows and all tasks launched.If you want to close some window inside screen - just
exit
from shell in it. If you want to close all shells/tasks in all windows and exit screen - just pressCTRL+A CTRL+\
and press "Y" when asked.For all the rest see man screen.
I've seen this alternative to a reliable ssh "like" connection:
http://mosh.mit.edu/
I would usually do: