Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi Possessors of Perl Wisdom:

I've written a script to parse data out of a "top" command. It does it for 128 processors of a parallel linux cluster by using a simple:

@top=`rsh $node top -n 1 -b`;

Now, this runs fine when I run it on the command line, but through the web, which is where it needs to be accessed, it doesn't issue the command and the perl script just parses an empty @top array.

Is this an issue of not being able to process the "child" program when accessed through the web? Is it a permissions problem?

Any help would be much appreciated! Thanks, -Jeff

Replies are listed 'Best First'.
Re: Trouble Using "Top" Within Perl
by fokat (Deacon) on Sep 14, 2002 at 00:32 UTC
    I assume that when you say 'through the web', you mean 'when this code is invoked from within a CGI'. My first suggestion, is to make sure that the user under which your CGI is running, if this is the case, can invoke the command in the way you shown.

    Warning: If this user can perform commands such as those on other machines, this is a *very* serious security issue. If a cracker can get access to said user, he/she can learn a lot about your network and servers and pottentially, do a lot of harm.

    The least you can do, is to use ssh in place of rsh. Although this does not fix the problem I outlined before, it at least allows you to use strong(er) authentication than what stock rsh offers.

    Regards.

Re: Trouble Using "Top" Within Perl
by belg4mit (Prior) on Sep 14, 2002 at 00:58 UTC
    You might find GTop to be useful, perhaps via Apache::VMonitor on each node.

    --
    perl -pew "s/\b;([mnst])/'$1/g"

Re: Trouble Using "Top" Within Perl
by sauoq (Abbot) on Sep 14, 2002 at 00:47 UTC

    Try using the full path to rsh as well as the full path to top (assuming the path is the same on each node.)

    I agree with fokat that rsh should probably not be available. There are environments where it makes sense though. I'm assuming yours is one of them. Given that you are working with a cluster, I imagine that it is by design.

    -sauoq
    "My two cents aren't worth a dime.";
    
Re: Trouble Using "Top" Within Perl
by kschwab (Vicar) on Sep 14, 2002 at 15:13 UTC
    You could check the $? variable after the backtick call. My best guess is that rsh is in /usr/sbin, which isn't in the PATH environment variable in your CGI environment.

    Another idea would be to capture stderr:

    @top=`rsh $node top -n 1 -b 2>&1`;
    Then you might catch what the shell and/or rsh is unhappy about.