Remote Zugriff

B

Borack

Mitglied
Thread Starter
Dabei seit
15.05.2006
Beiträge
73
Reaktionspunkte
0
Ich habe eine grundsätzliche Frage zum Remote Zugriff.
Für den Fernzugriff verwende ich ssh, mein Problem.
Wenn ich per ssh einen Dienst starte oder etwas kompilieren will funktioniert das nur solange das lokale Terminal Fenster geöffnet ist.
Gibt es eine Möglichkeit einen Befehl remote zu starten so dass dieser auch weitergeführt wird selbst wenn der Rechner von wo aus man den Befehl gegeben hat heruntergefahren wird?

Vielen Dank für eure Antwort
-Borack
 
Ja, die Möglichkeit gibt es.
Angenommen, du bist über SSH eingeloggt, und willst ein Shellscript starten, dann geht das mit

Code:
Pfad-zum-Script/script.sh &

Dieses "&" schickt den Prozess in den Hintergrund. Als Ausgabe erhältst du lediglich die PID des gestarteten Prozesses. Anschliessend kannst du dich ausloggen und der Prozess läuft weiter.
 
Das reicht nicht. Wenn du den Prozess so in den Hintergrund schickst musst du ihn trotzdem noch von der Shell abkoppeln, sonst wird er beendet wenn der Eltern-Prozess, also die SSH-Session beendet wird. Das abkoppeln geht mit disown.

Eine weitere Möglichkeit wäre, denn Prozess direkt mit nohup zu starten, also z.B. nohup ./script.sh &

Die dritte und wahrscheinlich beste Möglichkeit wäre mit screen zu arbeiten. Wie das geht erklär ich jetzt hier nicht, das würde den Rahmen sprengen. ;)

:teeth:
 
Das reicht nicht. Wenn du den Prozess so in den Hintergrund schickst musst du ihn trotzdem noch von der Shell abkoppeln, sonst wird er beendet wenn der Eltern-Prozess, also die SSH-Session beendet wird.

Nö.
Das funzt astrein, schon x-mal praktiziert ;)
 
Im Leben nicht. :rolleyes:

Wenn du dein Programm nur in den Hintergrund schickst und dann den Elternprozess killst werden sämtliche Kind-Prozesse mit dem HangUp-Signal beendet.

Und genau deshalb gibt es nohup, um das zu verhindern. Dabei wird die Kontrolle über den Kind-Prozess an init übergeben. Wenn das nicht so wäre, und deine Kind-Prozesse trotzdem unkontrolliert weiter laufen würden würdest du ja schön viele Zombie-Prozesse erzeugen. :p
 
Mir ist nohup durchaus nicht unbekannt.
Aber ich habe die Erfahrung gemacht, dass es ohne funktioniert.

Ich logge mich häufig von der Firma auf meinen Mac zu hause per ssh ein und stosse dann auch schon mal Jobs auf diese Art an.
Und sie laufen nicht als Zombie weiter.

Probier's aus :)
 
Du hast recht. Es funktioniert tatsächlich. Allerdings nur mit Shell-Skripten und auch nur in der bash. Zumindest hab ich spontan keine andere Shell gefunden, mit der es funktioniert hat. :p

Hätte ich ehrlich gesagt nicht erwartet, aber ich habe jetzt auch nicht den Nerv nachzuvollziehen warum das so ist. ;)
 
Du hast recht. Es funktioniert tatsächlich. Allerdings nur mit Shell-Skripten und auch nur in der bash.

Andere Shells hatte ich auch noch nicht getestet (in diesem Zusammenhang).
Hätte ich vielleicht dabeisagen müssen.
 
Warum nutzt Du nicht 'screen', was genau dafür vorgesehen ist?
 
vielen dank, nach sowas hab ich gesucht!
 
noch eine weitere frage habe ich allerdings, wie kopiere ich mittels ssh ein file vom local rechner zum remote rechner oder umgekehrt?
 
scp

Wenn du z.B. vom lokalen Rechner eine Datei auf einen remote Rechner kopieren möchtest, geht das mit

Code:
scp Pfad/Datei User@remote-ip:~/Pfad/Datei

Der umgekehrte Weg ist auch möglich:

Code:
scp User@remote-ip:~/Pfad/Datei Pfad/Datei

Auch das Kopieren von mehreren Dateien oder aller Unterverzeichnisse ist möglich. Am besten (wie immer) mal die manpage zu scp lesen. ;)
 
scp lokale_Datei user@remote_host:/Pfad
und umgekehrt.
 
Du hast recht. Es funktioniert tatsächlich. Allerdings nur mit Shell-Skripten und auch nur in der bash. Zumindest hab ich spontan keine andere Shell gefunden, mit der es funktioniert hat. :p

Hätte ich ehrlich gesagt nicht erwartet, aber ich habe jetzt auch nicht den Nerv nachzuvollziehen warum das so ist. ;)

Das funktioniert dann wenn es keine Ausgabe auf die Shell gibt, wenn du also ein Script hast was nicht in stdout und stderr schreibt dann bleibt der Prozess runable auch wenn die shell beendet wird (Erfahrungswerte ;) ). Man kann das denk auch erzeugen in dem man stderr und stdout auf /dev/null oder in ein File piped (also > /dev/null 2>&1 & ans ende und er Prozess sollte bleiben), aber ob das immer geht weiss ich nicht.
Aber nohup ist irgendwie schöner, und funktioniert auch sicher :)
 
Das mit der pipe in eine datei oder nach /dev/null funktioniert.
Mach' ich auch, falls der Prozess eine Ausgabe erzeugt.

:D sagen wir mal so:
für die genannten "Spezialfälle" (also Shellscript in der bash) funktioniert meine Methode sehr gut. Für andere Anwendungen ist nohup besser.
 
btw.. Ischi

2 sehr gute Zitate!
 
Danke :) … Da kommt der Nerd in mir raus ;)
 
Zurück
Oben Unten