Czy w skrypcie można używać „screen” nad SSH?


1

Mam ten interesujący problem, w którym chciałbym uruchomić to polecenie

nc -l 8023 | zfs receive tank3/pro1

na zdalnym hoście 10.10.10.11.

Jeśli ucieknę

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

od wewnątrz skryptu, to nie jest kontynuowane w skrypcie, ponieważ zfsczeka na STDIN.

Jeśli przekieruję STDIN, STDOUT, STDERR

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

następnie skrypt kontynuuje, ale przekierowanie STDIN niszczy zfspolecenie.

Pytanie

Czy screenmożna to rozwiązać?

Lub inne pomysły?

Odpowiedzi:


2

Możesz spróbować następującego przykładu:

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

-t Wymuś alokację pseudotty. Można to wykorzystać do wykonania dowolnych programów ekranowych na zdalnym komputerze, co może być bardzo przydatne


Zaczyna tailsię na zdalnym hoście na ekranie, ale nie daje mi powłoki z powrotem na hoście lokalnym, więc mój skrypt może kontynuować.
Sandra

To dlatego, tail -fże nie wychodzi; podąża za plikiem na zawsze, dopóki go jawnie nie zabijesz.
chepner

0

Nie mam ZFS, ale stworzyłem prosty skrypt naśladujący czytanie standardowego. Wydaje się dla mnie pracować

~ / sand / readme.sh:

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

I wtedy:

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

Lub z pojedynczymi cytatami:

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

\oddziela wiele zdalnych poleceń ssh, a przynajmniej wydaje mi się, że tak się zachowuje :). disownpozwoli ci oderwać się od pracy w tle. Używam tego za każdym razem, gdy uruchamiam długie polecenie i zdaję sobie sprawę dopiero po tym, jak powinienem to zrobić na ekranie. CTRL+Z; bg; disownjeśli kiedykolwiek znajdziecie się w takim scenariuszu. Możesz wylogować się z SSH i będzie on nadal działał w tle.


Bardzo ciekawe polecenie! Działa z twoim przykładem, ale z zfsjakiegoś powodu nie.
Sandra

0

Możesz w tym celu użyć screena, -d -maby uruchomić w trybie odłączonym:

ssh 10.10.10.11 screen -d -m 'nc -l 8023 | zfs receive tank3/pro1'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.