in reply to untaring at remote location

ok guys i got it : now i am facing a problem : my aim is to create a socket program with concurrent server so what i do is from my client i try connecting to a port initially and when it fails i just transfer a tar file with a perl script to server and run a server program , now i am stuck in system() from which i invoke the script on the server because this server will keep listening till the end of time (machine is off) and my system gets hung, is there any way i can get out of this system() even though the server should keep running, the test function is similar to system but is more robust 9 from open ssh package)

my $ssh = Net::OpenSSH->new ( $hostmachine, user =>$username, password + => $password); $ssh->scp_put($sourcedir,$sourcedir2,$remote_path) or die "scp failed \n" . $ssh->error; my $rc = $ssh->test('perl sabkuch.pl'); #check if test function returned or not if ($rc == 1){ print "test was ok , server established \n"; } else { print "return from test = $rc \n"; } exit;

the file sabkuch.pl is as follows

#!/usr/bin/perl use strict; use warnings; + system('tar -xvf test.tar'); exec('cd utpsm_run_automation && perl utpsm_lts_server.pl'); exit;

please help

Replies are listed 'Best First'.
Re^2: untaring at remote location
by Corion (Patriarch) on Jun 16, 2016 at 06:46 UTC

    Have you considered launching your program on the remote end and having it detach from its SSH session? Most likely a double-fork or simply launching it via nohup should put your script in the background, detached from the session that started it.

    Also, the "Perl" script you've shown is basically just a shell script. If you really want to use Perl, I would replace cd by the chdir function and the invocation of utpsm_lts_server.pl to either the do function or just start that program directly from the calling SSH script.

    Also note that exec never returns.

      thanks for the info , i dont know how to use nohup , perl is also new for me hence i wasnt aware of the chdir and do , now i was trying to use fork: sabkuch.pl forks a child which will run this server , the code is something like this, but that too is not getting me desired result

      1 #!/usr/bin/perl 2 3 use strict; 4 use warnings; 5 6 system('tar -xvf test.tar'); 7 8 my $child_pid = fork; 9 10 if (!defined $child_pid){ 11 print "couldn't fork \n"; 12 } 13 14 else { 15 print "in child , now executing \n"; 16 exec('cd utpsm_run_automation && perl utpsm_lts_server.pl') 17 or die "can't run server.pl in sabkuch child \n"; 18 } 19 20 exit;

      could you please help me with this ?

        I think the child will also need to ignore the HUP signal:

        $SIG{SIGHUP} = 'ignore';

        But personally, I would instead look at the nohup manpage and just use that.

        Also, your error description doesn't really help me help you with your problem as you don't tell us what exactly happens.

Re^2: untaring at remote location
by stevieb (Canon) on Jun 15, 2016 at 11:07 UTC

    Corion did help, more than 45 minutes before you posted this node, here.