É possível usar “screen” sobre SSH no script?

1

Estou tendo este problema interessante, onde gostaria de iniciar este comando

nc -l 8023 | zfs receive tank3/pro1

em um host remoto 10.10.10.11 .

Se eu correr

ssh -n 10.10.10.11 'nohup nc -l 8023 | zfs receive tank3/pro1 &'

de dentro de um script, então ele não continua no script, porque zfs está esperando por STDIN.

Se eu redirecionar STDIN, STDOUT, STDERR

ssh -n 10.10.10.11 'nohup nc -l 8023 | zfs receive tank3/pro1 &> /dev/null < /dev/null &'

o script continua, mas redirecionar STDIN destrói o comando zfs .

Pergunta

Pode o screen ser usado para resolver isso?

Ou outras ideias?

    
por Sandra 21.02.2013 / 18:17

3 respostas

2

Você pode tentar o seguinte exemplo:

ssh -t root@server1 screen "tail -f /var/log/messages"

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful

    
por 21.02.2013 / 18:24
0

Eu não tenho o ZFS, mas fiz um script simples para imitar a leitura de stdin. Parece trabalhar para mim

~ / sand / readme.sh:

#!/bin/sh
while read X
do
   echo $X
done

E então:

ssh localhost "nc -l 8023 | ~/sand/readme.sh &\disown"

Ou com aspas simples:

ssh localhost 'nc -l 8023 | ~/sand/readme.sh &\disown'

\ separa vários comandos ssh remotos, ou pelo menos parece se comportar assim para mim :). disown permitirá que você interrompa um trabalho de segundo plano. Eu uso isso sempre que executo um longo comando e percebo somente depois de ter feito isso em uma tela. CTRL+Z; bg; disown se você se encontrar nesse cenário. Você pode sair do SSH e ele continuará sendo executado em segundo plano.

    
por 22.02.2013 / 11:05
0

Você pode usar a tela para isso, com -d -m para iniciar no modo desanexado:

ssh 10.10.10.11 screen -d -m 'nc -l 8023 | zfs receive tank3/pro1'
    
por 29.02.2016 / 19:46