DynGig-CLI
view release on metacpan or search on metacpan
lib/DynGig/CLI/Service.pm view on Meta::CPAN
_start( $name, $config, $link, $path, $log ) if $option{u} || $option{r};
## status
system _path( 'svstat' ), $path if $option{s};
return 0;
}
sub _path
{
my $command = shift @_;
return $command unless $SVC_PATH;
my $path = Cwd::abs_path( $SVC_PATH );
return $path && -d $path ? File::Spec->join( $path, $command ) : $command;
}
sub _svc
{
return ! system _path( 'svc' ), @_;
}
sub _start
{
my ( $name, $config, $link, $path, $log ) = @_;
croak "cannot mkdir $log" if system 'mkdir', '-p', $log;
my $setuidgid = _path( 'setuidgid' );
my $multilog = _path( 'multilog' );
my $user = $config->{user};
my $main = './main';
_run_script( $name, "exec %s %s nice -n %d %s 2>&1 || sleep %d",
$setuidgid, map { $config->{$_} } qw( user nice command pause ) );
_run_script( $log,
"mkdir -p %s\nchown -R %s %s\nexec %s %s %s t I s%d n%d %s",
$main, $user, $main, $setuidgid, $user, $multilog,
$config->{log_size}, $config->{log_keep}, $main );
die "$name: already running\n" if -l $link;
croak "symlink: $!" unless symlink $path, $link;
}
sub _run_script
{
my $path = shift @_;
my $handle = File::Temp->new();
my $temp = $handle->filename();
printf $handle "#!/bin/sh\n";
printf $handle @_;
$path = File::Spec->join( $path, 'run' );
$handle->unlink_on_destroy( 0 );
croak "failed to mv $temp $path" if system 'mv', $temp, $path;
croak "chmod $path: $!" unless chmod 0544, $path;
}
=head1 NOTE
See DynGig::CLI
=cut
1;
__END__
( run in 0.716 second using v1.01-cache-2.11-cpan-fe3c2283af0 )