Schrift
[thread]4330[/thread]

SSH Befehl mit PERL - Please HELP

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
pq
 2004-07-23 19:55
#37968 #37968
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hmm, vielleicht vor dem restart noch ein sleep einfügen und das ganze im
hintergrund ausführen?
also $ssh->cmd("sleep 1 & /etc/rc.d/init.d/network restart &");
(ungetestet)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2004-07-23 20:39
#37969 #37969
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=pq,23.07.2004, 17:55]hmm, vielleicht vor dem restart noch ein sleep einfügen und das ganze im
hintergrund ausführen?
also $ssh->cmd("sleep 1 & /etc/rc.d/init.d/network restart &");
(ungetestet)[/quote]
Meinst Du nicht eher das hier:
Code: (dl )
$ssh->cmd("{ sleep 1; /etc/rc.d/init.d/network restart; } &");

Sonst hat man naemlich nur einen daemonisierten sleep, der eine Sekunde andauert---\n\n

<!--EDIT|betterworld|1090600810-->
Gast Gast
 2004-07-24 20:44
#37970 #37970
Hallo zusammen,
danke erstmal für die Antworten.

Also die Sache mit dem Sleep habe ich auch schon versucht.
Allerdings passiert dann nichts anderes denn das ssh Kommando wartet genauso auf das Beenden des Befehls als ohne sleep.
Mit sleep dann leider nur verzögert :-( !!!

Habe auch schon versucht auf dem anderem Host ein weiteres Script zu erstellen das dann denn Befehl zum Restart des Netzwerks beinhaltet auch mit sleep aber ihr könnt euch ja bestimmt das Ergebniss denken :-)!!!!!

Aber mir ist eingefallen das man vielleicht mit fork() einfach den ssh Befehl als Kind Prozess starten könnte wenn der dann hängen bleibt würde das Hauptscript ja nicht hängen bleiben.
Den Kindprozess könnte ich dann ja nach ein paar Sekunden später aus dem Scipt killen.

Mhhh was meint ihr dazu vielleicht ein paar Ideen zur Realisierung???

THX
betterworld
 2004-07-24 20:59
#37971 #37971
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Sorry, ich habe etwas nicht beachtet: ssh wartet, bis alle Prozesse beendet sind, die noch etwas ueber die Pipe schicken koennten. Als Abhilfe versuch mal dieses hier:
Code: (dl )
$ssh->cmd("{ sleep 1; /etc/rc.d/init.d/network restart; } 2>/dev/null >/dev/null </dev/null &");

Das habe ich gerade ausprobiert, das geht.\n\n

<!--EDIT|betterworld|1090688441-->
maceis
 2005-01-05 21:45
#37972 #37972
User since
2005-01-05
4 Artikel
BenutzerIn
[default_avatar]
Dazu muss afaik "atrun" auf dem entfernten Rechner laufen.
Aus Performancegründen möchte man das aber oft nicht.

Eine Alternative, die in die selbe Richtung geht, wäre es, auf dem entfernten Rechner ein Shellskript anzulegen.
In diesem Skript beginnt man mit einem "sleep 10" o. ä. und startet dannach das Netzwerk neu.

HTH\n\n

<!--EDIT|maceis|1104954343-->
gruß maceis

Eppur Si Muove (Gallileo Gallilei)
Blackbird
 2004-07-23 18:51
#37973 #37973
User since
2004-07-23
1 Artikel
BenutzerIn
[default_avatar]
Hallo an alle die das lesen.
Ich hoffe es kann mir jemand ein paar Tips zu meinem Problem geben, sonst werde ich mir wohl noch eine Glatze dabei rupfen müssen .

Also folgendes hatte ich vor zu realisieren:

- In einem Perl script einen remote SSH Befehl mittels Net::ssh:Perl absetzen.
Dieser soll dann auf dem entfernten Rechner das Netzwerkscript,
/etc/rc.d/init.d/network, neu starten.

Das ist der Codeabschnitt dafür:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use Net::SSH::Perl;

cmdossh("172.16.1.89","root", "root");

sub cmdossh {

my($host, $args);

($host, $args{user}, $args{password}, $mode)=@_;

my $ssh = Net::SSH::Perl->new($host);

$ssh->login($args{user},$args{password});

$ssh->cmd("/etc/rc.d/init.d/network restart");

}


Der Befehl wird auf der Remotekiste auch korrekt ausgeführt allerdings hängt danach auf meinem lokalen rechner das script weil die Verbindung unterbochen wurde.

Es ist also mein frage wie ich auf dem entfernten Rechner das Netzwerk neu starten kann und mein Script einfach weiter arbeitet egal wie das ergebniss auf dem anderem Rechner aussieht.

Insgesamt ist der Code nur ein Ausschnit aus einem Prog das es ermöglichen soll auf einem entfernten Rechner die IP Einstellungen Ändern zu können und danach auch wirksam zu machen, eben durch das neustarten des Netzwerks.

Danke im Vorraus für jegliche Hilfe.
renee
 2004-07-23 20:04
#37974 #37974
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Blackbird,23.07.2004, 16:51]
Code: (dl )
 $ssh->cmd("/etc/rc.d/init.d/network restart");
[/quote]
Code: (dl )
my($out, $err, $exit) =  $ssh->cmd("/etc/rc.d/init.d/network restart");

dann gib doch mal die Variablen aus...

Und benutzt Du in Deinem Skript
use strict;
use warnings;
??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2004-07-23 21:07
#37975 #37975
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
@betterworld: jo =)
meine shell-kenntnisse sind doch schlechter als ich denke. dabei habe ich es
hier sogar lokal ausprobiert, und mich nicht gewundert, warum das zweite
kommando sofort gestartet wurde...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2004-07-24 20:49
#37976 #37976
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Guest,24.07.2004, 18:44]Aber mir ist eingefallen das man vielleicht mit fork() einfach den ssh Befehl als Kind Prozess starten könnte wenn der dann hängen bleibt würde das Hauptscript ja nicht hängen bleiben.
Den Kindprozess könnte ich dann ja nach ein paar Sekunden später aus dem Scipt killen.[/quote]
Genau das macht die Bash, wenn Du meine Zeile da oben nimmst. Ich hoffe, Du hast den & (Ampersand) dahinter nicht vergessen, denn das ist das wichtigste

(Warum koennen unregistrierte Leute denn ploetzlich antworten?)\n\n

<!--EDIT|betterworld|1090687825-->
Strat
 2004-07-25 01:02
#37977 #37977
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
eine moeglichkeit waere vielleicht, das abfangen der antwort mit alarm abzubrechen.. siehe [perldoc=-f alarm]-f alarm[/perldoc] fuer ein Codebeispiel (funktioniert aber nicht unter Windows)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-07-23 19:55.