Se você está tentando executar um processo remotamente, e não se importa em manter a sessão do ssh aberta, você pode querer usar screen
. Ele permitirá que você execute seu processo no "segundo plano" e continuará funcionando após o seu logout.
Primeiro, ssh
para a caixa remota e, a partir daí, use screen
e inicie o processo, e você poderá fornecer seu nome de sessão screen
, se desejar. Você realmente não notará nada diferente, mas inicie seu processo nessa sessão. Você pode sair da sessão screen
usando o comando Ctrl-a d
. Será algo parecido com isto:
user@remotebox:~$ screen -S foobarsession
user@remotebox:~$ startmyprocess
[detached from 4865.foobarsession]
user@remotebox:~$
Você pode sair da sessão ssh e o processo continuará sendo executado. Para reconectar-se à sessão screen
mais tarde, volte para a caixa remota e use screen -r
para reconectar. Você pode usar screen -ls
para listar as sessões.
user@remotebox:~$ screen -ls
There is a screen on:
4865.foobarsession (10/05/2012 11:10:57 AM) (Detached)
1 Socket in /var/run/screen/S-user
user@remotebox:~$ screen -r foobarsession
user@remotebox:~$ screen -ls
4865.foobarsession (10/05/2012 11:10:57 AM) (Attached)
1 Socket in /var/run/screen/S-user
user@remotebox:~$
Ou, se screen
não estiver instalado, você poderá usar o comando nohup
na caixa remota. Wikipedia explica bem:
Nohupping backgrounded jobs is typically used to avoid terminating them when logging
off from a remote SSH session. A different issue that often arises in this situation
is that ssh is refusing to log off ("hangs"), since it refuses to lose any data
from/to the background job(s). This problem can also be overcome by redirecting all
three I/O streams:
nohup ./myprogram > foo.out 2> foo.err < /dev/null &
Então você poderia fazer algo como:
ssh -n -f user@remotebox "sh -c 'cd /foo/bar; nohup ./myprogram > foo.out 2> foo.err < /dev/null &'"