Forum Programmation.perl script PERL et restart hebdomadaire d'apache

Posté par  .
Étiquettes : aucune
0
18
jan.
2007
Je suis débutante en Perl, j'ai à partir d'une interface graphique (site PHP apache) un script perl qui lance par threads 2 autres sripts perl . L'un de ces 2 scripts va peupler une base de donnée avec des mesures (temperature). l'autre va lire les mesures et en fonction de règles prédéfinies déclenche des actions. La base de donnée est une base mysql qui est exploitée par un site apache hebergé sur mon serveur (fedora FC4).
Cela fonctionne bien . Le problème est un restart d'apache tous les dimanche à 4h00 qui a pour conséquence de déactiver le script "père" .l'automate est à ce moment là arrêté. Il n'y a rien de programmé dans les crontab. Pour preuve si je lance les 2 scripts par le cron je n'ai pas de restart. Par contre j'ai plein d'erreurs "duplicate entry" dans les log apache, comme si les threads étaient encore actives?
J"ai 2 choix soit trouver la faille dans le script qui provoque ce restart, soit trouver comment desactiver les threads (peut être supprimer la page de l'interface graphique?)
Je précise que le site et les scripts ont été developpés par un internaute qui n'a plus le temps de s'investir dans ce travail.

voici le script :
#!/usr/bin/perl
use Config;
use Mysql;
use threads;

use Getopt::Long;

$Config{useithreads} or die
"Recompilez Perl avec les threads actives pour faire tourner ce programme.";

my $r_timer = 20;
my $v_timer = 10;
my $cmd_retrive = "/var/www/html/aquariomate/scripts/aquariomate.pl";
my $cmd_watch = "/var/www/html/aquariomate/scripts/ruleswatcher.pl";

my $result = GetOptions ( 'help|?' => sub{ &list_usage();exit(0); },
'rt:s' => sub { $r_timer=$_[1]; },
'vt:s' => sub { $v_timer=$_[1]; }
);
if (!$result) {&list_usage();exit(0);}

print("Config: rt=$r_timer vt=$v_timer\n");
my $thread1 = threads->new(\&run_script_and_wait, $cmd_retrive, $r_timer);
my $thread2 = threads->new(\&run_script_and_wait, $cmd_watch, $v_timer);
my @DonneesRenvoyees1 = $thread1->join;
my @DonneesRenvoyees2 = $thread2->join;
exit(0);

sub run_script_and_wait($$) {
my $cmd = shift;
my $timer = shift;
print("Go for cmd=$cmd timer=$timer\n");

while (1) {
my $rc = system($cmd);
if ($rc != 0) {
print("Error in $cmd\n");
}
sleep $timer;
}
}

sub list_usage {
print("aqua_cron.pl [-h] [-rt <timer_secs>] [-vt <timer_secs>]\n");

print("\t -h : aide\n");
print("\t -rt <timer_secs> : dlai en secondes entre 2 run du script de recuperation des donnes\n");
print("\t -vt <timer_secs> : dlai en secondes entre 2 run du script qui surveille les rgles\n");
}

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.