Schrift
[thread]10987[/thread]

Net::ssh::perl - command im hintergrund ausführen

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2007-12-10 11:18
#103676 #103676
Mein Perl-Programm soll auf einem anderen Rechner einen Befehl ausführen, der allerdings mehrere Minuten dauert. Dazu benutze ich Net::SSH::Perl.
Mein Programm stoppt hier aber und wartet auf die Beendigung des Befehls. Wie kann ich einen Befehl im Hintergrund ausführen?

Code (perl): (dl )
1
2
3
4
my $host = "hostname";
my $ssh = Net::SSH::Perl->new($host);
$ssh->login();
my($out, $err, $exit) = $ssh->cmd("./directory/shellscript.sh");
GwenDragon
 2007-12-10 14:42
#103685 #103685
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
Indem du dein Skript im Hintergrund laufen lässt mit dem Parameter &.
Beispiel:

meinsshcmd &
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Gast Gast
 2007-12-10 16:58
#103693 #103693
falls du es so gemeint hast:
Code (perl): (dl )
my($out, $err, $exit) = $ssh->cmd("./directory/shellscript.sh &");

dann geht es leider nicht. es wird trotzdem auf den return-wert des scripts gewartet.
GwenDragon
 2007-12-10 20:30
#103705 #103705
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
Nein, dein lokales Skript!
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Dubu
 2007-12-11 00:25
#103720 #103720
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
STDIN und STDERR sind immer noch mit dem virt. Terminal verbunden.

Das könnte funktionieren:
Code (perl): (dl )
my($out, $err, $exit) = $ssh->cmd("./directory/shellscript.sh >/dev/null 2>&1 &");

Gast Gast
 2007-12-11 10:29
#103724 #103724
@gwendragon: mein lokales script ist ein interaktives script mit gui usw. das im hintergrund laufen zu lassen hilft mir dann nicht wirklich weiter.


@ dubu: werd ich gleich mal testen. thx :)
Gast Gast
 2007-12-11 10:30
#103725 #103725
>/dev/null 2>&1
was passiert hier eigentich genau ?

nepos
 2007-12-11 11:13
#103726 #103726
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
STDOUT und STDERR werden nach /dev/null umgeleitet.

Eventuell könnte man vor
Code: (dl )
./directory/shellscript.sh
noch nohup einfügen...
GwenDragon
 2007-12-11 13:41
#103730 #103730
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
Gast+2007-12-11 09:29:00--
@gwendragon: mein lokales script ist ein interaktives script mit gui usw. das im hintergrund laufen zu lassen hilft mir dann nicht wirklich weiter.
Aha. Jetzt hast du mehr preisgegeben, um welches Programm es sich handelt. Aber weiter oben hast du dich aber sehr schwammig ausgedrückt, welches Programm stoppt und wartet:
Quote
Mein Programm stoppt hier aber und wartet auf die Beendigung des Befehls. Wie kann ich einen Befehl im Hintergrund ausführen?

Gedankenlesen kann ich nicht ;)

Zum remote gestarteten Skript selbst:
Du musst dann eben in der Shell $? prüfen, ob es geklappt hat. Hängt aber wieder davon ab, was dein Shell-Skript zurückgibt.
Aber das weist du bestimmt wohl schon.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Gast Gast
 2007-12-11 13:51
#103731 #103731
ja am anfang habe ich auch nicht gedacht, dass es denn wichtig sein könnte, das ich ja eigentlich gehofft hatte, dass es da z.b. einen zusatz operator/option IM net::ssh::perl modul gibt, um die übergebenen commands im hintergrund auszuführen.
Aber nun gut :D




Main hauptprogramm besteht aus einem Gui, in dem u.a. Anzeigen enthalten sind, die sich alle x sekunden aktualisieren.
Zusätzich gibt es noch mehrere Buttons. Bei einem Button wird beim Anklicken der von mir oben beschriebene Code ausgeführt.
Sprich, es wird eine ssh verdindung zu einem anderen PC aufgebaut, das sh-script soll dann dort gestartet werden, die ssh-connection wieder geschlossen und fertig. Das sh-script läuft dann auf dem anderen Rechner noch mehrere Stunden vor sich hin.

Wenn ich jetzt auf den Knopf drücke, dann startet zwar das script auf dem anderen Rechner, aber z.b. hört dann mein Hauptprogramm auf zu arbeiten. Es werden dann u.a. die Anzeigen nicht mehr aktualisiert, etc. Im prinzip ist das ganze Gui nur noch ne weiße Fläche etc.

Also was ich eigenlich wollte ist, dass ich eine Möglichkeit habe per Knopfdruck dem Hauptprogramm zu sagen: verbinde dich mit dem Rechner xyz, starte ein dort vorhandenes shellscript und kümmere dich nicht mehr weiter darum.

So, ich hoffe mal, das reicht für nen kleinen Überblick :D
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2007-12-10 11:18.