#! /usr/bin/perl use strict ; use warnings ; package Probe::Init_d ; use base 'Probe' ; # daemon_sshd spin init_d sshd ssh # daemon_ftpd spin init_d vsftpd # daemon_httpd spin init_d httpd apache2 # daemon_pg spin init_d postgresql # daemon_ntpd spin init_d ntpd ntp # daemon_postfix spin init_d postfix # daemon_mysql spin init_d mysql mysqld # daemon_ldap spin init_d slapd ldap # daemon_squid spin init_d squid # daemon_mestre spin init_d mestrelablicserver # daemon_cups spin init_d cups # daemon_nginx spin init_d nginx sub ITEMS { [ { name => 'daemon_sshd' , kind => 'spin' , args => [ qw(sshd ssh) ] } , { name => 'daemon_ftpd' , kind => 'spin' , args => [ qw(vsftpd) ] } , { name => 'daemon_httpd' , kind => 'spin' , args => [ qw(httpd apache2) ] } , { name => 'daemon_pg' , kind => 'spin' , args => [ qw(postgresql) ] } , { name => 'daemon_ntpd' , kind => 'spin' , args => [ qw(ntpd ntp) ] } , { name => 'daemon_postfix' , kind => 'spin' , args => [ qw(postfix) ] } , { name => 'daemon_mysql' , kind => 'spin' , args => [ qw(mysql mysqld) ] } , { name => 'daemon_ldap' , kind => 'spin' , args => [ qw(slapd ldap) ] } , { name => 'daemon_squid' , kind => 'spin' , args => [ qw(squid) ] } , { name => 'daemon_mestre' , kind => 'spin' , args => [ qw(mestrelablicserver) ] } , { name => 'daemon_cups' , kind => 'spin' , args => [ qw(cups) ] } , { name => 'daemon_nginx' , kind => 'spin' , args => [ qw(nginx) ] } ] } ; sub main { my $self = shift ; my $itms = shift ; # items to probe : [ item, ... ] my $clnt = shift ; # main::CLIENT my $path = $self -> path ; my $prog = "$path/init_d.pl" ; my $DIST = $Util::DISTRIB ; my $SYSC = '/bin/systemctl' ; for my $item ( @$itms ) { my $args = $item -> args ; my ( $prog, @args ) ; OBB::TT ( " probing name %s args [@$args]", $item -> name ) ; if ( $DIST eq 'ubuntu' ) { @args = ( grep { -f "/etc/init/$_.conf" } @$args ) [ 0 ] ; if ( @args ) { $prog = 'service' ; push @args, 'status' } } unless ( $prog ) { $prog = ( grep { -f $_ } map { "/etc/init.d/$_" } @$args ) [ 0 ] ; @args = qw(status) ; } if ( ! $prog and -f $SYSC ) { my $hav ; for my $arg ( @$args ) { my $try = Probe::Util::run_prog ( $SYSC, 'is-enabled', $arg ) ; if ( $try -> xit == 0 ) { $hav = $arg ; last ; } } if ( $hav ) { $prog = $SYSC ; @args = ( 'is-active', $hav ) ; } } OBB::TT ( ' dist %s prog %s args %s', $DIST, $prog, "@args" ) ; if ( $prog and @args ) { my $out = Probe::Util::run_prog ( $prog, @args ) ; my $val = $out -> xit ? Dmon::SPIN_DO : Dmon::SPIN_UP ; my $nam = $item -> name ; $item -> set_val ( $val ) ; } else { $item -> perr ( "no init[.d] file [@$args]" ) ; } } } 1 ;