Hei
Jeg har laget et perl script som bruker tråder for å utføre kommandoer samtidig på to ssh servere. Jeg bruker Net::SSH::Perl modulen til dette selv om jeg vet at jeg bare kunne brukt ssh kommandoen for å utføre kommandoene rett i scriptet, bruker dette fordi jeg har lyst til å lære å bruke modulen og jeg synes den er mer behagelig å bruke.
Det er to tråder som kjører i programmet. Den første tråden starter opp, oppretter et SSH objekt og etter det så henger programmet. Når jeg kjører en strace mot programmet så får jeg følgende output:
Noen som vet hvorfor dette skjer og hva jeg må gjøre for å få programmet til å kjøre som det skal ? Det programmet skulle gjort var å opprette to SSH forbindelser samtidig og utfører kommandoen "ls" samtidig. Jeg bruker kommandoen "ls" for å bare sjekke at dette faktisk fungerer, noe det tydligvis ikke gjør. Jeg har søkt en del på google og andre forumer uten å finne en løsning på dette, jeg har også lest en del på cpan, perldoc (bla. http://search.cpan.org/~nwclark/perl...perlthrtut.pod).
Perl koden er vist nedenfor:
Jeg hadde $user, $password og $sshSession for globale variabler på toppen av scriptet, men jeg satt de inn i hver sin sub-rutine for å prøve å unngå alle mulige "race-conditions".
Jeg har laget et perl script som bruker tråder for å utføre kommandoer samtidig på to ssh servere. Jeg bruker Net::SSH::Perl modulen til dette selv om jeg vet at jeg bare kunne brukt ssh kommandoen for å utføre kommandoene rett i scriptet, bruker dette fordi jeg har lyst til å lære å bruke modulen og jeg synes den er mer behagelig å bruke.
Det er to tråder som kjører i programmet. Den første tråden starter opp, oppretter et SSH objekt og etter det så henger programmet. Når jeg kjører en strace mot programmet så får jeg følgende output:
Kode
Process 12899 attached - interrupt to quit futex(0xb7c28bd8, FUTEX_WAIT, 12900, NULL^C <unfinished ...>
Perl koden er vist nedenfor:
Kode
#!/usr/bin/perl -w use strict ; use Net::SSH::Perl ; use threads ; my $host1 = "(some ip)" ; my $host2 = "(some ip)" ; # creating a new thread my $thread1 = threads->create('connect_localhost') ; my $thread2 = threads->create('connect_external') ; # thread1 sub-routine sub connect_localhost { my $user = "user" ; my $password = "xxx" ; my $sshSession = Net::SSH::Perl->new($host1) ; print "connecting to $host1\n" ; $sshSession = Net::SSH::Perl->new($host1) ; print "ssh object created for $host1\n" ; $sshSession->login($user, $password) ; print "connected to $host1\n" ; $sshSession->cmd("ls") ; print "\nexecuting the command on $host1...\n\n" ; } # thread2 sub-routine sub connect_external { my $user = "user" ; my $password = "xxxx" ; my $sshSession = Net::SSH::Perl->new($host2) ; print "connecting to $host2\n" ; $sshSession = Net::SSH::Perl->new($host2) ; print "ssh object created for $host2\n" ; $sshSession->login($user, $password) ; print "connected to $host2\n" ; $sshSession->cmd("ls") ; print "\nexecuting the command on $host2...\n\n" ; } my $returnedLocalhost = $thread1->join() ; my $returnedExternal = $thread2->join() ; exit 0 ;
Sist endret av exceed; 10. januar 2009 kl. 14:57.