Changeset 8
- Timestamp:
- 11/22/07 01:10:13 (1 year ago)
- Files:
-
- sys_alive.pl (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
sys_alive.pl
r7 r8 20 20 ############################################################### 21 21 # DerniÚre version sur : http://scripts.twidi.com/ # 22 # Informations : http://b.twidi.com/index.php/tag/sys_alive # 22 23 ############################################################### 23 24 # Contributeurs : # … … 27 28 ############################################################### 28 29 # Historique : # 30 # v 1.5.1: 2007-11-21 : mode "demon" utilisable en tant que # 31 # script de démarrage (/etc/init.d) # 29 32 # v 1.5 : 2007-11-19 : mode "demon", tentatives supll. # 30 33 # d'arrets de demons # … … 70 73 # 2) adapter la configuration dans le fichier sys_alive.conf # 71 74 # 3) mettre la configuration en chmod 600 # 72 # 4) mettre le script en cron (en root) toutes les minutes : # 75 # 4) mettre le script en cron(4.1) ou le lancer en demon(4.2) # 76 # 4.1) mettre le script en cron (en root) toutes les minutes: # 77 # Mettre en conf mode_demon.actif à 0 # 73 78 # Lancer, en root : crontab -e # 74 # Et ajouter : * * * * * /chemin_de_sys_alive/sys_alive.pl # 79 # Et ajouter : * * * * * /chemin/de/sys_alive/sys_alive.pl # 80 # 4.2) lancer le script en demon # 81 # Mettre en conf mode_demon.actif à 1 # 82 # Le lancer : /chemin/de/sys_alive/sys_alive.pl start # 83 # Le lier par exemple vers /etc/init.d/sys_alive et mettre # 84 # à jour les scripts de démarrage pour un lancement # 85 # automatique (en fonction de votre distribution) # 75 86 ############################################################### 76 87 … … 80 91 use File::Pid; 81 92 82 Proc::Daemon::Init;83 84 93 #------------------------------------------------------------------------------# 85 94 # répertoire des données : remplacer *éventuellement* GetLocalRep() par 86 95 # le répertoires où est stocké le fichier de configuration, uniquement s'il ne 87 # doit pas être stocké dans le même répertoire que ce programme 96 # doit pas être stocké dans le même répertoire que ce programme ou si sys_alive 97 # est configuré pour tourner en mode démon 88 98 89 99 my $rep_conf = GetLocalRep(); … … 94 104 #------------------------------------------------------------------------------# 95 105 # fichier de configuration 106 die 'Fichier conf non trouvé' if ! -e $rep_conf.'/sys_alive.conf'; 96 107 require($rep_conf.'/sys_alive.conf'); 97 108 … … 101 112 102 113 # variables globales 103 my $version = '1.5 ';114 my $version = '1.5.1'; 104 115 my $arg = lc(shift(@ARGV)); 105 116 if (!$main::logfile) { $main::logfile = $main::rep_log.'/sys_alive.log'; } … … 113 124 ); 114 125 126 my $demon_running = demon_running(); 127 my $mode_demon_actif = $main::mode_demon{'actif'} || $demon_running; 128 115 129 my $term = $ENV{'TERM'} ? '' : 'TERM=vt100; export TERM;'; # on simule un terminal si la variable d'environnement n'est pas définie 116 130 … … 118 132 if ($arg eq 'stop') { 119 133 SetInfo('stopped', 1); 120 WriteLog('Arrêt de sys_alive'); 134 if ($mode_demon_actif) { 135 $pid{'obj'} = File::Pid->new({ 136 file => $pid{'file'}, 137 pid => $demon_running, 138 }); 139 $pid{'value'} = $demon_running; 140 } else { 141 WriteLog('Désactivation de sys_alive'); 142 } 121 143 } elsif ($arg eq 'start') { 122 144 SetInfo('stopped', 0); 123 WriteLog('Redémarrage de sys_alive'); 124 } 125 126 if ($main::mode_demon{'actif'}) { 145 WriteLog('Réactivation de sys_alive') if !$mode_demon_actif; 146 } elsif ($mode_demon_actif) { 147 WriteLog('Usage en mode demon : /chemin/de/sys_alive/sys_alive.pl start|stop', 1); 148 } 149 150 exit if $infos{'stopped'}; 151 152 if ($mode_demon_actif) { 127 153 mode_demon(); 128 154 } else { … … 132 158 # mode demon 133 159 sub mode_demon { 134 160 WriteLog('Erreur : Sys_alive est déjà lancé en mode démon (pid='.$demon_running.')', 1) if $main::mode_demon{'actif'} and $demon_running; 161 162 Proc::Daemon::Init; 135 163 $pid{'obj'} = File::Pid->new({ 136 164 file => $pid{'file'}, … … 138 166 }); 139 167 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 168 if ($pid{'value'} = $pid{'obj'}->write()) { 148 169 WriteLog('Sys_alive lancé en mode démon (pid='.$pid{'value'}.')'); … … 152 173 153 174 while(1) { 175 %infos = LireFichier(); 176 last if $infos{'stopped'}; 154 177 sys_alive(); 155 178 sleep($main::mode_demon{'wait'} || 60); … … 170 193 my %process; 171 194 172 %infos = LireFichier();173 195 # on ne vas gérer le tout que si sys_alive n'est pas stoppé 174 196 if (!$infos{'stopped'}) { … … 465 487 -- 466 488 Mail envoyé par sys_alive.pl, programme de surveillance serveur v$version 467 -> http://scripts.twidi.com/script.cgi?script=./sys_alive.pl <- 489 http://scripts.twidi.com/ ou http://b.twidi.com/index.php/tag/sys_alive 468 490 ENDFINMAIL 469 491 … … 617 639 sub WriteLog { 618 640 my ($texte, $die) = @_; 641 print $texte."\n" if $die; 619 642 LockFichier($main::logfile, 1); 620 643 my %d = GetTime(); … … 624 647 close(LOG); 625 648 LockFichier($main::logfile, 0); 626 dieif $die;649 exit 1 if $die; 627 650 return 1; 628 651 } … … 737 760 # ================================================================= 738 761 762 # test si un demon sys_alive tourne deja 763 sub demon_running { 764 $pid{'obj'} = File::Pid->new({ 765 file => $pid{'file'}, 766 pid => $$, 767 }); 768 769 my $current_pid; 770 if (-e $pid{'file'}) { 771 eval { $current_pid = $pid{'obj'}->running(); }; 772 WriteLog('Erreur : ProblÚme en accédant au fichier pid : '.$@, 1) if $main::mode_demon{'actif'} and $@; 773 } 774 775 return $current_pid; 776 } # fin de demon_running 777 739 778 # END : appelé à la fin du script : supprime le fichier pid si besoin 740 779 sub END { 741 if ($m ain::mode_demon{'actif'}and $pid{'obj'} and $pid{'value'}) {780 if ($mode_demon_actif and $pid{'obj'} and $pid{'value'}) { 742 781 $pid{'obj'}->remove(); 782 Execute('kill -15 '.$pid{'value'}) if $pid{'value'} != $$; 743 783 WriteLog('Sys_alive stoppé en mode démon (pid='.$pid{'value'}.')'); 744 784 }
