Changeset 5

Show
Ignore:
Timestamp:
11/20/07 00:37:11 (3 years ago)
Author:
twidi
Message:

refonte du mode de gestion pid pour utiliser File::Pid qui pourra servir pour les pid des process à gérer

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sys_alive.pl

    r4 r5  
    7777 
    7878use Proc::Daemon; 
    79 use Proc::PID_File
     79use File::Pid
    8080use Sys::Syslog qw(:standard :macros); 
    8181 
     
    107107my %infos = LireFichier(); 
    108108my %ignore; 
     109my %pid = ( 
     110        obj   => undef, 
     111        file  => $main::mode_demon{'pid_file'} || '/var/run/sys_alive.pid', 
     112        value => 0, 
     113); 
    109114 
    110115my $term = $ENV{'TERM'} ? '' : 'TERM=vt100; export TERM;'; # on simule un terminal si la variable d'environnement n'est pas définie 
     
    124129        sys_alive(); 
    125130} 
    126 exit; 
    127131 
    128132# mode demon 
    129133sub mode_demon { 
    130         my $current_pid; 
    131         eval { $current_pid = hold_pid_file($main::mode_demon{'pid_file'} || '/var/run/sys_alive.pid'); }; 
    132         WriteLog('Erreur : ProblÚme en accédant au fichier pid : '.$@, 1) if $@; 
    133         WriteLog('Erreur : Sys_alive est déjà lancé en mode démon (pid='.$current_pid.')', 1) if $current_pid; 
    134         WriteLog('Sys_alive lancé en mode démon (pid='.$$.')'); 
     134 
     135        $pid{'obj'} = File::Pid->new({ 
     136                file => $pid{'file'}, 
     137                pid  => $$, 
     138        }); 
     139 
     140        if (-e $pid{'file'}) { 
     141                my $current_pid; 
     142                eval { $current_pid = $pid{'obj'}->running(); }; 
     143                WriteLog('Erreur : ProblÚme en accédant au fichier pid : '.$@, 1) if $@; 
     144                WriteLog('Erreur : Sys_alive est déjà lancé en mode démon (pid='.$current_pid.')', 1) if $current_pid; 
     145        } 
     146 
     147        if ($pid{'value'} = $pid{'obj'}->write()) { 
     148                WriteLog('Sys_alive lancé en mode démon (pid='.$pid{'value'}.')'); 
     149        } else { 
     150                WriteLog('Erreur : ProblÚme en écrivant le fichier pid : '.$@, 1) if $@; 
     151        } 
     152 
    135153        while(1) { 
    136154                sys_alive(); 
     
    707725} 
    708726# ================================================================= 
     727 
     728# END : appelé à la fin du script : supprime le fichier pid si besoin 
     729sub END { 
     730        if ($main::mode_demon{'actif'} and $pid{'obj'} and $pid{'value'}) { 
     731                $pid{'obj'}->remove(); 
     732                WriteLog('Sys_alive stoppé en mode démon (pid='.$pid{'value'}.')'); 
     733        } 
     734} # fin de END