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 )