ssh + screen: jak to zrobić?

0

Próbuję uruchomić oprogramowanie przez ssh:

Potrafię :

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

Ale

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

Nie działa

Wypróbowałem kilka opcji z cytatami:

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

lub

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

lub

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

ale nie mogę znaleźć właściwego :-(

Romain Jouin
źródło
Nie wierzę, że przestrzenie mają z tym coś wspólnego. Podstawowym problemem jest poinformowanie ssh, aby poszedł w tło, a po drugie, upewnienie się, że ~nie jest ono rozwijane lokalnie. Powiązane pytanie: superuser.com/questions/1171397/…
crimson-egret

Odpowiedzi:

0

Lepiej pogrupować opcje razem

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

Następnie możesz ponownie podłączyć

screen -r NAMEofSCREEN

Pamiętaj tylko, że po commandwyjściu nie będzie to ekran, który można ponownie podłączyć . Na przykład:

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

Otrzymasz wallwiadomość ...

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

.. ale ekran zostanie natychmiast zamknięty po pomyślnym uruchomieniu polecenia

Robert Riedl
źródło
„lepiej zgrupować opcje razem”? Powiedziałbym, że jest to kwestia opinii i całkowicie nieistotna dla problemu PO.
szkarłatny-czapla
Przepraszamy, ale „-dmS” jest rodzajem standardowego ciągu opcji dla ekranu. Dzięki temu jest bardziej czytelny, po co korzystać z dodatkowej przestrzeni? Oczywiście nie jest to konieczne.
Robert Riedl
Masz rację, że dodatkowa przestrzeń nie jest potrzebna i prawdopodobnie łatwiejsza do odczytania, jeśli jesteś przyzwyczajony do patrzenia -dmS NAME, ale nadal nie odpowiada na problem podniesiony przez pytającego.
crimson-egret
Zaktualizuję odpowiedź
Robert Riedl
0

Widzę dwa (potencjalne) problemy z twoją inkantacją

ssh -t remote screen -S datanode -d -m ~/hadoop/bin/hdfs datanode
  1. Klient / local shell (jeden wykonanie ssh) to jeden rozszerza ~i zastąpienie wartości $HOME, która może być różna od zdalnego serwera. Zaproponuj użycie ścieżki względnej (np. ./hadoop/bin/hdfs) Lub ścieżki w pełni kwalifikowanej lub zacytowanie polecenia zdalnego pojedynczymi cudzysłowami (np. „~ / Hadoop / bin / hdfs datanode”), aby zapobiec ekspansji na kliencie.
  2. Ponieważ screenpolecenie uruchamia odłączoną instancję, ale nadal jest procesem potomnym powłoki uruchomionej przez ssh, jest przerywane po wyjściu powłoki zdalnej.

Co więcej, ponieważ screen tworzy własne tty, nie potrzebujesz takiej -topcji ssh.

Spróbuj zamiast tego użyć -fpolecenia, sshaby przejść w tło tuż przed wykonaniem polecenia. to znaczy:

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

Równie ważna alternatywa przy użyciu nohup:

ssh remote nohup screen -S datanode -d -m ./hadoop/bin/hdfs datanode
szkarłatna czapla
źródło