Executando o comando em um novo processo de shell bash

3

Eu olhei ao redor como eu teria pensado que esta seria uma pergunta bastante comum, mas nada parece estar funcionando para mim.

Basicamente eu estou tentando SSH em um dispositivo (Raspberry Pi) para executar um processo. O processo é node ./bin/www . Eu escrevi um script publish.sh que faz algumas coisas antes disso, mas quando executo o comando ssh user@hostname "cd <my-location>;node ./bin/www ele inicia o processo no meu shell bash atual.

O que eu quero fazer é abrir um novo bash shell para executar esse comando, pois esse processo iniciará um servidor web.

Eu testei o comando ssh em bash -c 'ssh ...' , mas ele ainda roda na mesma janela em que o script publish.sh foi iniciado. Estou fazendo algo errado? O que exatamente eu preciso fazer no meu shell script para executar um comando em um novo processo de shell bash?

Obrigado!

    
por Thomas Stringer 08.03.2016 / 15:57

2 respostas

5

Você pode usar a opção ssh with -n como,

ssh -Xn user@hostname <command> <argument>

O uso de -X é opcional para encaminhar X11. No seu caso,

ssh -n user@hostname node ./bin/www

Exemplo: Para abrir um arquivo de texto (arquivo.txt) na máquina remota com gedit ,

ssh -Xn user@hostname gedit file.txt

Em man ssh

-n      A common trick is to use this to run X11 programs on a remote machine.  For example,
         ssh -n shadows.cs.hut.fi emacs & will start an emacs on shadows.cs.hut.fi, and the X11 connection will be
         automatically forwarded over an encrypted channel.  The ssh program will be put in the background.
    
por souravc 08.03.2016 / 16:28
1

Para fazer isso usando o shell:

ssh -t master 'bash -ic "{ cd <my-location>; node ./bin/www ;} &"'

Um pouco estrito usando disown ( nohup também pode ser usado):

ssh -t master 'bash -ic "{ cd <my-location>; node ./bin/www ;} & disown"'
  • -t alocará um pseudo TTY para ativar o controle de trabalho

  • bash -i tornará o shell interativo, caso contrário, a conexão com o mestre será encerrada

No seu caso, você pode sair sem o agrupamento de comandos {} :

ssh -t master 'bash -ic "cd <my-location>; node ./bin/www &"'
    
por heemayl 08.03.2016 / 17:11

Tags