ssh + screen: como?

0

Estou tentando iniciar um software por meio do ssh:

Eu posso fazer:

ssh -t [email protected] 
screen -S datanode -d -m ~/hadoop/bin/hdfs datanode

Mas

ssh -t [email protected] screen -S datanode -d -m ~/hadoop/bin/hdfs datanode

Não funciona

Eu tentei várias opções com aspas:

ssh -t [email protected] screen '-S datanode -d -m ~/hadoop/bin/hdfs datanode'

ou

ssh -t [email protected] screen -S datanode -d -m '~/hadoop/bin/hdfs datanode'

ou

ssh -t [email protected] screen ' -S datanode -d -m ~/hadoop/bin/hdfs datanode'

mas não consigo encontrar o correto: - (

    
por Romain Jouin 16.01.2018 / 10:39

2 respostas

0

É melhor agrupar as opções

ssh -t username@host "screen -dmS 'NAMEofSCREEN' command"

Você pode então reconectar com

screen -r NAMEofSCREEN

Lembre-se de que essa não será uma tela re-anexável se command sair. Por exemplo:

ssh -t username@host "screen -dmS 'NAMEofSCREEN' echo | wall"

Você receberá a mensagem wall ...

Broadcast message from user@host (pts/15) (Tue Jan 16 12:04:07 2018):

.. mas a tela será fechada imediatamente após o comando ter sido executado com êxito

    
por 16.01.2018 / 12:06
0

Eu vejo dois problemas (potenciais) com seu encantamento de

ssh -t remote screen -S datanode -d -m ~/hadoop/bin/hdfs datanode
  1. O shell cliente / local (aquele que está executando ssh ) é aquele que está expandindo ~ e substituindo pelo valor de $HOME , que pode ser diferente do servidor remoto . Sugira que você use um caminho relativo (por exemplo, ./hadoop/bin/hdfs ) ou um caminho completo ou cite o comando remoto com aspas simples (por exemplo, '~ / hadoop / bin / hdfs datanode') para impedir a expansão no cliente.
  2. Como o comando screen está iniciando uma instância desanexada, mas ainda é um processo filho do shell iniciado por ssh, ele é finalizado quando o shell remoto é encerrado.

Além disso, como a tela cria seu próprio tty, você não precisa da opção -t para ssh .

Tente usar -f para informar ssh para entrar em segundo plano antes da execução do comando. ou seja:

ssh -f remote screen -S datanode -d -m ./hadoop/bin/hdfs datanode

Alternativa igualmente válida usando nohup :

ssh remote nohup screen -S datanode -d -m ./hadoop/bin/hdfs datanode
    
por 22.01.2018 / 21:56