FU: Add -procname import option and setting $0 to something useful
This commit is contained in:
parent
ea8ad9e483
commit
91b2421a84
1 changed files with 28 additions and 4 deletions
32
FU.pm
32
FU.pm
|
|
@ -8,15 +8,22 @@ use FU::Log 'log_write';
|
||||||
use FU::Util;
|
use FU::Util;
|
||||||
use FU::Validate;
|
use FU::Validate;
|
||||||
|
|
||||||
|
my $procname;
|
||||||
|
my $scriptpath = $0;
|
||||||
|
|
||||||
sub import($pkg, @opt) {
|
sub import($pkg, @opt) {
|
||||||
my $c = caller;
|
my $c = caller;
|
||||||
no strict 'refs';
|
no strict 'refs';
|
||||||
*{$c.'::fu'} = \&fu;
|
*{$c.'::fu'} = \&fu;
|
||||||
|
my $spawn;
|
||||||
for (@opt) {
|
for (@opt) {
|
||||||
if ($_ eq '-spawn') { _spawn() }
|
if (ref $procname eq 'FU::ARG') { $procname = $_ }
|
||||||
|
elsif ($_ eq '-procname') { $procname = bless {}, 'FU::ARG' }
|
||||||
|
elsif ($_ eq '-spawn') { $spawn = 1; }
|
||||||
else { croak "Unknown import option: '$_'" }
|
else { croak "Unknown import option: '$_'" }
|
||||||
}
|
}
|
||||||
|
croak "Missing argument for -procname option" if ref $procname eq 'FU::ARG';
|
||||||
|
_spawn() if $spawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -209,7 +216,7 @@ sub _monitor {
|
||||||
die if $m > $data{$_};
|
die if $m > $data{$_};
|
||||||
},
|
},
|
||||||
no_chdir => 1
|
no_chdir => 1
|
||||||
}, $0, values %INC, @monitor_paths);
|
}, $scriptpath, values %INC, @monitor_paths);
|
||||||
0
|
0
|
||||||
} // 1;
|
} // 1;
|
||||||
}
|
}
|
||||||
|
|
@ -409,6 +416,7 @@ sub _do_req($c) {
|
||||||
|
|
||||||
sub _run_loop($c) {
|
sub _run_loop($c) {
|
||||||
my $stop = 0;
|
my $stop = 0;
|
||||||
|
my $count = 0;
|
||||||
local $SIG{HUP} = 'IGNORE';
|
local $SIG{HUP} = 'IGNORE';
|
||||||
local $SIG{TERM} = $SIG{INT} = sub { $stop = 1 };
|
local $SIG{TERM} = $SIG{INT} = sub { $stop = 1 };
|
||||||
|
|
||||||
|
|
@ -418,7 +426,13 @@ sub _run_loop($c) {
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my sub setstate($state) {
|
||||||
|
$0 = sprintf "%s: %s [#%d%s]", $procname, $state, $count, $c->{max_reqs} ? "/$c->{max_reqs}" : '' if $procname;
|
||||||
|
}
|
||||||
|
|
||||||
while (!$stop) {
|
while (!$stop) {
|
||||||
|
setstate 'idle';
|
||||||
|
|
||||||
$c->{client_sock} ||= $c->{listen_sock}->accept || next;
|
$c->{client_sock} ||= $c->{listen_sock}->accept || next;
|
||||||
$c->{fcgi_obj} ||= $c->{listen_proto} eq 'fcgi' && FU::fcgi::new(fileno $c->{client_sock}, $c->{proc});
|
$c->{fcgi_obj} ||= $c->{listen_proto} eq 'fcgi' && FU::fcgi::new(fileno $c->{client_sock}, $c->{proc});
|
||||||
|
|
||||||
|
|
@ -427,11 +441,13 @@ sub _run_loop($c) {
|
||||||
passclient;
|
passclient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setstate 'working';
|
||||||
_do_req $c;
|
_do_req $c;
|
||||||
|
|
||||||
$c->{client_sock} = $c->{fcgi_obj} = undef if !($c->{fcgi_obj} && $c->{fcgi_obj}->keepalive);
|
$c->{client_sock} = $c->{fcgi_obj} = undef if !($c->{fcgi_obj} && $c->{fcgi_obj}->keepalive);
|
||||||
|
|
||||||
passclient if $c->{max_reqs} && !--$c->{max_reqs};
|
$count++;
|
||||||
|
passclient if $c->{max_reqs} && $count >= $c->{max_reqs};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -489,12 +505,14 @@ sub _supervisor($c) {
|
||||||
fcntl $client, Fcntl::F_SETFD, 0;
|
fcntl $client, Fcntl::F_SETFD, 0;
|
||||||
$ENV{FU_CLIENT_FD} = fileno $client;
|
$ENV{FU_CLIENT_FD} = fileno $client;
|
||||||
}
|
}
|
||||||
exec $^X, (map "-I$_", @INC), $0;
|
exec $^X, (map "-I$_", @INC), $scriptpath;
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
$childs{$pid} = 1;
|
$childs{$pid} = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$0 = sprintf "%s: supervisor [%d/%d]", $procname, scalar keys %childs, $c->{proc} if $procname;
|
||||||
|
|
||||||
my ($fd, $msgadd) = FU::Util::fdpass_recv(fileno($rsock), 500);
|
my ($fd, $msgadd) = FU::Util::fdpass_recv(fileno($rsock), 500);
|
||||||
push @client_fd, $fd if $fd;
|
push @client_fd, $fd if $fd;
|
||||||
next if !defined $msgadd;
|
next if !defined $msgadd;
|
||||||
|
|
@ -1048,6 +1066,12 @@ returning strings deal with perl Unicode strings, not raw bytes.
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item use FU -procname => $name
|
||||||
|
|
||||||
|
When the C<-procname> import option is set, FU automatically updates the
|
||||||
|
process name (as displayed in L<top(1)> and L<ps(1)>, see `$0`) with
|
||||||
|
information about the current process, prefixed with the given C<$name>.
|
||||||
|
|
||||||
=item FU::init_db($info)
|
=item FU::init_db($info)
|
||||||
|
|
||||||
Set database configuration. C<$info> can either be a connection string for C<<
|
Set database configuration. C<$info> can either be a connection string for C<<
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue