Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10985[/thread]

IPC::RUN mehrere Parameter übergeben

Leser: 1


<< >> 7 Einträge, 1 Seite
Gast Gast
 2007-12-10 11:10
#103674 #103674
ich möchte gerne mit meinem script mit der start-methode des moduls IPC::Run eine ssh-verbindung herstellen, einen command ausführen und den Output ausgeben lassen.

Leider finde ich keine möglichkeit, der ssh die nötigen informationen zu übergeben (loginname, host, befehl).


Code (perl): (dl )
1
2
3
my $in = "export PATH=\$PATH:.";
my @cmd = qw( ssh );
my $h = start \@cmd, \$in, \$out;


In diesem Codestück ist ja eben noch keine loginname/host information vorhanden, aber ich $in kann ich ja nur einen einzigen string speichern.

Wenn ich dann einfach $in in ein array ( @in ) ändere und darin dann die benötigten informationen speichere, dann bekomme ich einen fehler.
Code (perl): (dl )
1
2
3
my @in = ("-l username", "hostname", "export PATH=\$PATH:.");
my @cmd = qw( ssh );
my $h = start \@cmd, \@in, \$out;
renee
 2007-12-10 11:21
#103677 #103677
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum nimmst Du nicht ein Modul wie CPAN:Net::SSH bzw, CPAN:Net::SSH::Perl
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/
Gast Gast
 2007-12-10 11:38
#103678 #103678
mh, das wäre eine möglichkeit, allerdings habe ich dann gleich ein neues problem xD

und zwar möchte ich dann die ProzessID von einem bestimmten Prozess (einduetiger name) herausfinden und ihn dann killen.

Dazu habe ich im netz einen command gefunden, der die PID in Abhängigkeit von Namen des Prozesses zurückgibt.

ps ux | awk '/prozessname\.sh/ && !/awk/ {\$2}

In meinem Script sieht es dann so aus:
Code (perl): (dl )
1
2
3
4
5
my $host = "hostname";
my $ssh = Net::SSH::Perl->new($host, debug => "1");
$ssh->login();
my($out, $err, $exit) = $ssh->cmd("ps ux | awk '/prozessname\.sh/ && !/awk/ {\$2}'");
$ssh->cmd("kill -9 $out");
Gast Gast
 2007-12-10 11:40
#103679 #103679
das problem ist dann, dass anscheinend keine prozessid gefunden wird.

in der konsole steht dann nur: "Sending command: kill -9"

eigentlich sollte dann ja dastehen: "Sending command: kill -9 123456"
Gast Gast
 2007-12-10 11:50
#103680 #103680
wenn ich es z.b. so mache, dann wird in der console die richtige PID ausgegeben.

Code (perl): (dl )
$my var = start("ssh", "-l username", "hostname", "ps ux | awk '/prozessname\.sh/ && !/awk/ {print \$2}'");


Hier ist dann aber das problem, dass ich den Rückgabewert, also die PID, nicht in meinem weiteren Programm verwenden kann, da der Rückgabewert des ganzen ausdrucks (start("ssh", ...) die komplette objektinstanz von IPC::Run ist.

Und genau deswegen hätte ich ja gerne, dass ich start so benutzen kann, wie ich es im ersten post beschrieben hatte ^^
Dubu
 2007-12-11 00:17
#103719 #103719
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Code: (dl )
killall -9 prozessname

wenn vorhanden.

Grundsätzlich wäre ich aber mit der Verwendung von SIGKILL (-9) vorsichtig. Geht kein normales SIGTERM oder SIGINT?
ptk
 2007-12-11 00:36
#103721 #103721
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Gast+2007-12-10 10:10:56--
Code (perl): (dl )
my @in = ("-l username", "hostname", "export PATH=\$PATH:.");

Zumindest das ist falsch, "-l" und "username" müssen getrennt geschrieben werden.
<< >> 7 Einträge, 1 Seite



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