[PERL] tache cron [résolu]

tache cron [résolu] [PERL] - Perl - Programmation

Marsh Posté le 06-02-2007 à 11:26:35    

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
Reply

Marsh Posté le 06-02-2007 à 11:26:35   

Reply

Marsh Posté le 06-02-2007 à 11:36:28    

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.

Reply

Marsh Posté le 06-02-2007 à 14:39:00    

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
Reply

Marsh Posté le 06-02-2007 à 16:21:29    

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.

Reply

Marsh Posté le 06-02-2007 à 16:22:29    

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

Reply

Marsh Posté le 07-02-2007 à 16:21:36    

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.  :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed