Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.
It's a nasty hack, but I got sick and tired of always doing the following:
So I wrote something like this:
use List::MoreUtils 'uniq';
use Net::Domain 'hostname';
use Getopt::Long;
sub get_cat_host_port {
my ( $app_name, $user ) = @_;
$app_name.= "_server.pl";
$user ||= [getpwuid($<)]->[0];
# The sed bit is embarrassing but needed on a Cat restart
# when the shell quotes things:/
chomp(my @processes
= uniq `ps -ef|grep "$user.*$app_name"|grep -v grep|sed -e 's/"//g' -e 's/.* script//'`
);
if ( @processes > 1 ) {
require Data::Dumper;
$Data::Dumper::Indent = 1;
warn Data::Dumper->Dump( [\@processes], ['*processes'] );
die "Found more than one $app_name server for ($user)";
}
unless (@processes) {
die "Could not find any $app_name servers for ($user)";
}
local @ARGV = split/\s+/ => $processes[0];
local $SIG{__WARN__} = sub {
my $warning = shift;
return if $warning =~/Unknown option/; # wish this was configurable
CORE::warn($warning);
};
GetOptions(
'port=i' => \my $port,
'host=s' => \my $host,
);
$port ||= 3000;
$host ||= hostname();
return ( $host, $port );
}
It's now tucked away in a tools library so we can reuse this.
Fixing up that shell command (Score:1)
You had
ps -ef|grep "$user.*$app_name"|grep -v grep|sed -e 's/"//g' -e 's/.* script//'If you're using all GNU tools, you can improve that shell command a bit:
ps --no-header --user "$user" --format command | grep "^$app_name" | sed 's/"//g;s/.* script//'Re: (Score:2)
We're on Solaris. Many tools and options I took for granted on *nix systems simply aren't available. For example, the ps command does recognize the --no-header or --user options.
Other annoyances: tar doesn't recognize the z modifier and the absolute worst: grep doesn't recognize -r. No recursive grep. The options are either doing a find and piping the results to grep or using ack [cpan.org] (the latter of which is lovely, I might add).
Re: (Score:2)
Some admins get their panties in a bunch over the fact that GNU tar is not POSIX compliant, but most people shrug and decided they'd rather have something useful over some notion of correct, especially when Sun's tar can't handle paths over 256 characters.
That may be specifically relevent to you as a Catalyst user given this thread [google.com] from comp.unix.solaris.
Re: (Score:1)
can't you simply install some packages? sunfreeware.com is a good place.
Anyway my point was: don't forget /proc and magic
ps ;) perl -lpe 's{\0}{ }g' /proc/*/cmdline
cheers --stephan p.d at least if you have a decent support for it always worth to remember.Why Sed? (Score:1)
Why use Sed at all? Won't it work to do the transformations on Perl list elements rather than on lines in the shell?
Re: (Score:2)
See Proc::ProcessTable [cpan.org]
Re: (Score:2)
Re: (Score:2)
The only security change for /proc they made between 9 and 10 that I'm aware of is the cmdline information is now restricted to 80 characters unless you own the process. Which, in practice, meant we had to shell out to use /usr/ucb/ps -auxwww so we could distinguish between the Java processes with ridiculously long command
hrm... (Score:1)