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
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?
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
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.
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'