in reply to Execute a perl script fpr another Computer

If server B can run CGI scripts it is really easy. On server b put this in the cgi-bin

#/usr/bin/perl -w use strict; use CGI; my $q = new CGI; print $q->header(); # my $caller = $q->remote_host() so you know who called you my $err = do_something() print $err ? $err : "OK"; sub do_something { ... }

Then all server A has to do is call the script (assuming server b is at IP 192.168.0.123:

#!/usr/bin/perl -w use strict; use LWP::Simple while (1) { if ( some_event() ) { my $response = get('http://192.168.0.123/cgi-bin/server_b_scri +pt.pl'); warn $response =~ m/OK/ ? "Notified server b OK\n" : "$respons +e\n"; } sleep 10; } # check for some event sub some_event { ... }

Using Apache/IIS and CGI is a simple solution as you already have a server listening on port 80 on the remote machine. If you don't have this facility you essentially need to have a server script listening on a port on server b and a client on server a. There are plenty of examples of this on the site. Depending on the OS there may also be other ways to do it using native OS utilities.

cheers tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Replies are listed 'Best First'.
Re: Re: Execute a perl script fpr another Computer
by Draff (Acolyte) on Jan 02, 2003 at 07:56 UTC
    Hi Tachyon,
    I have try what you recomended here is the script I follow. But there is some error. Here is the script.
    My server B have Apache cgi install. And this is the script i put in. name : servert.pl
    #/usr/bin/perl -w use strict; use CGI; my $q = new CGI; print $q->header(); my $err = do_something(); print $err ? $err : "OK"; sub do_something { for (my $i=0;$i<20;$i++ { print "\7"; } }


    Then the server A i have put in the script name clientt.pl inside one of the folder.

    #!/usr/bin/perl -w use strict; use LWP::Simple #while (1) { # if ( some_event() ) { my $response = get('http://192.168.0.123/cgi-bin/servert.pl'); warn $response =~ m/OK/ ? "Notified server b OK\n" : "$respons +e\n"; # } sleep 10; #} # check for some event #sub some_event { ... }


    I have take out the while and the sub function because i just want to test whether it can call to the server B. but it reply me with the error below, even i didn't remark it.

    Use of uninitialized value in pattern match (m//) at clientt.pl line 1 +0. <br> Use of uninitialized value in concatenation (.) or string at clientt.p +l line 10<br>

      Your CGI will not compile for a start (missing closing ) after for... Plus you totally miss the point of the error check. The do_something() sub should either return 0 ie false if there was no error or the error message if whatever the hell it is supposed to do fails (just like a system call that returns 0 for OK or the error code). We then print out 'OK' if there was no error message or the error message if there was and error. You should be able to call this script and get either the error message or OK in your browser.

      The address you type in to get to this script ie http://mysite.com/cgi-bin/script.pl if the address that the second script need to use. Once you have that working the rest will work fine provided you modify the second script to point at this CGI and don't just blindly paste in the IP address I posted - your server is probably not at http://192.168.0.123/ - this needs to be changed.

      #/usr/bin/perl -w use strict; use CGI; my $q = new CGI; print $q->header(); my $err = do_something(); print $err ? $err : "OK"; sub do_something { if ( 1 + 1 == 2 ) { return 0; } else { return 'An error has occurred 1 + 1 is not equal to 2!' } }

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

        Thank you Techyon u safe my life
        Hi Techton,
        Sure i won't copy blindly, :) because i not pasting my script there due to problem I'm using my personal computer now, and my pc cannot connect to my internal server. So I can't manage to paste the script i have amended to paste here. I have to internal server which using ip 10.3.33.xx for this testing.
        I found the error already is my setting of the #!D:\Perl\bin\perl -w for window, not usr :)