Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
624 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] tache cron [résolu]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] tache cron [résolu]

n°1511284
Profil sup​primé
Posté le 06-02-2007 à 11:26:35  answer
 

Bonjour à tous,
 
Je suis actuellement en stage, je suis élève de deuxième année de bts informatique, et actuellement je fais un cluster de serveur proxy, tout se passe bien sauf une chose, je dois faire un script perl qui va permettre de copier sur le deuxieme serveur les configurations du second, tout ce passe très bien lorsque j'execute le script manuellement, mais lorsque je veux qu'il s'execute en tache cron rien ne se passe.
Apparement toutes les commandes sytème ne fonctionne pas dans mon script lorsqu'il est executé en tache cron et j'ignore pourquoi, si l'un d'entre vous pouvait m'aider à comprendre ce mystère je lui serais reconnaissant.
 
 
Voici mon script :  
 
#!/usr/bin/perl
sub Receptions
{
 my ($fichier,$poste, $destination) = @_ ;
 `scp root"@""$poste":"$fichier" "$destination"` ;  
}
sub Envois
{
 my ($fichier,$poste, $destination) = @_ ;
 `scp "$fichier" root"@""$poste":"$destination"`;
}
sub Diff
{
 my ($fichier1,$fichier2) = @_ ;
 if (`diff '$fichier1' '$fichier2'`)  
 {
  return "oui" ;
 }
 else
 {
  return "non" ;
 }
}
sub VerifMaitre
{
 if (`ifconfig eth0:0 | grep adr`)
 {
  return "oui" ;
 }
 else
 {
  return "non" ;
 }
}
# main
`mkdir /tmp/synchro/` ;
if ( `ifconfig eth1 | grep adr` =~ /192\.168\.0\.1/ )
{
 $poste = "192.168.0.2" ;
}
elsif ( `ifconfig eth1 | grep adr` =~ /192\.168\.0\.2/ )
{
 $poste = "192.168.0.1" ;
}
if ( &VerifMaitre eq "oui" )
{
 my $fichier = "/etc/squid/squid.conf /etc/squid/squidGuard.conf /etc/ha.d/ha.cf /etc/ha.d/haresources /etc/ha.d/authkeys /etc/drbd.conf /root/.ssh/authorized_keys /etc/apache/httpd.conf /etc/webmin/miniserv.users /etc/passwd /etc/shadow" ;
 my $destination = "/tmp/synchro/" ;
 &Receptions($fichier,$poste,$destination) ;
 my @fichiers = (`ls /tmp/synchro`) ;
 for (@fichiers)
 {
  chomp ;
  if ( /squid/ )
  {
   $fichier1 = '/tmp/synchro/'.$_ ;    
   $fichier2 = '/etc/squid/'.$_ ;  
   if ( &Diff($fichier1,$fichier2) eq "oui" )
   {
    &Envois($fichier2,$poste,$fichier2) ;
    $destination = $fichier2.".1" ;
    &Envois($fichier1,$poste,$destination) ;
   }
  }
  elsif ( /ha\.cf/ or /haresources/ or /authkeys/)
  {
   $fichier1 = '/tmp/synchro/'.$_ ;    
   $fichier2 = '/etc/ha.d/'.$_ ;  
   if ( &Diff($fichier1,$fichier2) eq "oui" )
   {
    &Envois($fichier2,$poste,$fichier2) ;
    $destination = $fichier2.".1" ;
    &Envois($fichier1,$poste,$destination) ;
   }
  }
  elsif ( /authorized_keys/ )
  {
   $fichier1 = '/tmp/synchro/'.$_ ;    
   $fichier2 = '/root/.ssh/'.$_ ;  
   if ( &Diff($fichier1,$fichier2) eq "oui" )
   {
    &Envois($fichier2,$poste,$fichier2) ;
    $destination = $fichier2.".1" ;
    &Envois($fichier1,$poste,$destination) ;
   }
  }
  elsif ( /httpd.conf/ )
  {
   $fichier1 = '/tmp/synchro/'.$_ ;    
   $fichier2 = '/etc/apache/'.$_ ;  
   if ( &Diff($fichier1,$fichier2) eq "oui" )
   {
    &Envois($fichier2,$poste,$fichier2) ;
    $destination = $fichier2.".1" ;
    &Envois($fichier1,$poste,$destination) ;
   }
  }
  elsif ( /miniserv.users/ )
  {
   $fichier1 = '/tmp/synchro/'.$_ ;    
   $fichier2 = '/etc/webmin/'.$_ ;  
   if ( &Diff($fichier1,$fichier2) eq "oui" )
   {
    &Envois($fichier2,$poste,$fichier2) ;
    $destination = $fichier2.".1" ;
    &Envois($fichier1,$poste,$destination) ;
   }
  }
  else
  {
   $fichier1 = '/tmp/synchro/'.$_ ;    
   $fichier2 = '/etc/'.$_ ;  
   if ( &Diff($fichier1,$fichier2) eq "oui" )
   {
    &Envois($fichier2,$poste,$fichier2) ;
    $destination = $fichier2.".1" ;
    &Envois($fichier1,$poste,$destination) ;
   }
  }
 }
 `mkdir /tmp/synchro/conf.d/` ;  
 $fichier = "/etc/apache/conf.d/*" ;
 $destination = "/tmp/synchro/conf.d/" ;  
 &Receptions($fichier,$poste,$destination) ;
 my @apache = (`ls /etc/apache/conf.d/`) ;
 for (@apache)
 {
  chomp ;
  $fichier1 = '/tmp/synchro/conf.d/'.$_ ;    
  $fichier2 = '/etc/apache/conf.d/'.$_ ;    
  if ( -e $fichier1)
  {
   if ( &Diff($fichier1,$fichier2) eq "oui" )
   {
    &Envois($fichier2,$poste,$fichier2) ;
    $destination = $fichier2.".1" ;
    &Envois($fichier1,$poste,$destination) ;
   }
  }
  else
  {
   &Envois($fichier2,$poste,$fichier2) ;
  }
 }    
}
`rm -rf /tmp/synchro/` ;


Message édité par Profil supprimé le 09-02-2007 à 15:14:32
mood
Publicité
Posté le 06-02-2007 à 11:26:35  profilanswer
 

n°1511297
Elmoricq
Modérateur
Posté le 06-02-2007 à 11:36:28  profilanswer
 

J'ai la flemme de tout lire, mais juste un truc : un truc lancé via la crontab n'a aucun environnement de chargé.
Je vois que tu demandes à ton script d'exécuter des programmes, vérifie la variable $ENV{PATH} à partir de la crontab.
 
Genre scp c'est souvent /usr/local/bin et ifconfig /usr/sbin, et ces deux répertoires ne sont pas forcément dans l'environnement par défaut.

n°1511389
Profil sup​primé
Posté le 06-02-2007 à 14:39:00  answer
 

Elmoricq a écrit :

J'ai la flemme de tout lire, mais juste un truc : un truc lancé via la crontab n'a aucun environnement de chargé.
Je vois que tu demandes à ton script d'exécuter des programmes, vérifie la variable $ENV{PATH} à partir de la crontab.
 
Genre scp c'est souvent /usr/local/bin et ifconfig /usr/sbin, et ces deux répertoires ne sont pas forcément dans l'environnement par défaut.


 
Merci de ta reponse, mais quand je fais un print sur $ENV{PATH} quand je l'execute en tache cron j'ai bien par exemple /sbin pour ifconfig (ce que me retourne la commande which) mais peut être ais je oublié quelques chose ?
 
EDIT : J'ai meme essayer avec des chemins absolu et pourtant rien ! :s


Message édité par Profil supprimé le 06-02-2007 à 15:13:34
n°1511478
Profil sup​primé
Posté le 06-02-2007 à 16:21:29  answer
 

J'ai trouvé !!!
En fait je ne sais pas pourquoi il n'aimait pas les |, comme ça ne change rien au resultat de mon script je les ai enlevé et tout va bien.
 
Merci de ton aide.

n°1511480
couak
Posté le 06-02-2007 à 16:22:29  profilanswer
 

bon déjà rien à voir avec perl =) en plus vu la tronche du script, c'est surtout une encapsulation de commandes shell dans un script perl
 
et pour faire simple : donne ta commande lancée manuellement et donne ta ligne du cron

n°1511866
Profil sup​primé
Posté le 07-02-2007 à 16:21:36  answer
 

couak a écrit :

bon déjà rien à voir avec perl =) en plus vu la tronche du script, c'est surtout une encapsulation de commandes shell dans un script perl
 
et pour faire simple : donne ta commande lancée manuellement et donne ta ligne du cron


 
 
Nan nan plus de problème je l'ai résolu ^^
Je savais que ça avait rien a voir avec le perl, j'avais mal configuré la tache cron tout simplement.
 
Merci quand même de votre aide.  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] tache cron [résolu]

 

Sujets relatifs
tache programmee php sous windowsvitesse d'éxecution sur différents ordinateurs (Résolu)
[Résolu][VBS Débutant Boucle Do-While-Loop Active Directory]problème mmap avec un deamon [résolu]
[Pb]Projet en C : Distributeur de boisson[résolu] Créer un fichier .bat (l'intérieur du fichier)
probleme d'installation d'un module perlErreur sous C# [Autre soucis]
Execution par cron d'un PHP pour créer une page Htmlexplication perl
Plus de sujets relatifs à : [PERL] tache cron [résolu]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR