skip to Main Content

I have a server running Perl and an Apache web server.

I wrote a script which closes running instances of perl.exe and then launches them again, with some system() commands.

When I try and run it from a browser it works as expected, closes all running perl.exe, but then it doesn’t restart them with my system("start my_script.pl").

This is my script running from the browser.

#!/Perl/bin/perl

use lib "/Perl/ta/mods" ;

# http://my_domain.com/cgi-bin/myscript.pl?

use CGI::Carp qw(fatalsToBrowser);
use IPC::System::Simple qw(system capture);
use Win32::Process::List;

my $script_to_end = "start path_to_scriptmyscript.pl" ;

system($script_to_end);

print "done" ;

exit;

This launching myscript.pl which does the following:

#!/Perl/bin/perl
use strict;
use warnings;
use lib "/Perl/ta/mods" ;
use Win32::Process::List;

my $script = 'io.socket' ;
my @port = (4005,5004) ;


my $scriptpath_4005 = "Perl C:\path_to_script\$script.pl $port[0]";
my $scriptpath_5004 = "Perl C:\path_to_script\$script.pl $port[1]";

our $nmealogger = "C:\nmealogger\nmealogger.exe";
system('TASKKILL /F /IM nmealogger* /T 2>nul');

print "current running perl instance: $$n" ;

my $P = Win32::Process::List->new();  #constructor
my %list = $P->GetProcesses();        #returns the hashes with PID and process name
foreach my $key ( keys %list ) {
    unless ($list{$key} eq 'perl.exe') { next ; }
    # $active_perl_pid{$key} = 1 ;
    print sprintf("%30s has PID %15s", $list{$key}, $key) . "nn";
    if ($$ == $key)
    {
        print "current running perl instance: $keyn";
        next;
    } else {
        print "kill: $keyn";
        system("TASKKILL /F /PID $key");
        # system('TASKKILL /F /IM powershell* /T 2>nul');
        }
}
system "start $nmealogger" ;
system "start $scriptpath_4005";
system "start $scriptpath_5004";


use common_cms;

exit;

This works fine if I run it from the machine, kills all perl.exe and re-launches perl.exe, but running from the browser it only kills them but never re-launches them.

I thought it could be to do with the httpd.conf settings but I’m not sure.

Any help would be greatly appreciated.

Thanks

2

Answers


  1. Chosen as BEST ANSWER

    Update: I couldn't get around this issue so took a different approach.

    Ended up changing the script running from the browser to write a log file on the server and created a scheduled task that runs every minute to check if that file exists, which then kicks of my script on the server.

    Quite a long way around but hey it works.

    Thanks for the suggestions, much appreciated.


  2. "start" runs the script in a new command window, correct? Presumably Apache is a service, please see related https://stackoverflow.com/a/36843039/2812012.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search