Les crons font des cronneries

Les crons font des cronneries - Linux et OS Alternatifs

Marsh Posté le 10-10-2005 à 10:21:20    

Bonjour amis linuxiens!!
 
Voila, je vous écris car j'ai un soucis avec mes crons! lol
 
Je vais essayer de donner le plus d'info possible.
 
J'utilise une redhat SE version 3 update 4
 
Je voulais lancer un script shell : procédurecalvet.sh et ceci à 6 heures 20 minutes. J'ai donc édité une crontab, situé dans /var/spool/cron :
 
SHELL=/bin/bash
HOME=/root
PATH=/usr/bin:/bin:/var/www/html/awstats/wwwroot/cgi-bin/calvet/
LOGNAME=root
 
20 06 * * * /var/www/html/awstats/wwwroot/cgi-bin/calvet/procedurecalvet.sh
 
Et comme vous pouvez vous douter cela ne marche pas.... lol
 
Rien ne se passe,or le script shell fonctionne lorsqu'on le lance dans un terminal, je reçois un mail d'erreur :
 
To: root@localhost.localdomain
Subject: Cron <root@awstats> /var/www/html/awstats/wwwroot/cgi-bin/calvet/procedurecalvet.sh
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin:/var/www/html/awstats/wwwroot/cgi-bin/calvet/>
X-Cron-Env: <LOGNAME=root>
 
/var/www/html/awstats/wwwroot/cgi-bin/calvet/procedurecalvet.sh: line 5: ./télécharge.sh: No such file or directory
/var/www/html/awstats/wwwroot/cgi-bin/calvet/procedurecalvet.sh: line 8: ./update.sh: No such file or directory
/var/www/html/awstats/wwwroot/cgi-bin/calvet/procedurecalvet.sh: line 11: ./efface.sh: No such file or directory
 
Le deamon cron est bien en marche, et les différents script shell (procedurecalvet.sh, télécharge.sh, update.sh, efface.sh) ont les droits 755....
 
Avez vous une idée?  
Ma syntaxe est elle fausse?
 
En vous remerciant par avance
 
SK!!


---------------
Il vaut mieux se taire et passer pour un con, plutot que l'ouvrir et prouver que l'on en est bien un....
Reply

Marsh Posté le 10-10-2005 à 10:21:20   

Reply

Marsh Posté le 10-10-2005 à 10:24:13    

déjà cron a bein exécuté ton script
sauf comme il l'a indiqué : il ne trouve pas télécharge.sh update.sh et efface.sh dans le répertoire courant. Au lieu de faire ./<programme> mais le chemin complet.

Reply

Marsh Posté le 10-10-2005 à 10:42:38    

spa bien les accents dans les noms de fichiers  :o

Reply

Marsh Posté le 10-10-2005 à 10:45:55    

lol j'avais pas vu, ça a mis plein de smileys.... :/
 
Merci pour ton conseil car en effet le probléme vient de là. Le script d'origine appelle un programme en perl, mais comme j'avais un doute je l'ai enlevé, je l'ai remis et ça marche pour le perl, ma syntaxe : perl /var/.../.../..../..../action.pl
 
Peux tu me dire s'il te plait comment lancer le shell?
 
J'ai mis ./..../...../..../.../action.sh mais ça marche pas lol....
 
La syntaxe ne doit pas étre bonne....
 
Merci par avnce  
 
SK


---------------
Il vaut mieux se taire et passer pour un con, plutot que l'ouvrir et prouver que l'on en est bien un....
Reply

Marsh Posté le 10-10-2005 à 10:49:08    

En fait télécharge.sh n'existe pas lol, c'est un script en perl à la place, mais merci pour la remarque


---------------
Il vaut mieux se taire et passer pour un con, plutot que l'ouvrir et prouver que l'on en est bien un....
Reply

Marsh Posté le 10-10-2005 à 10:49:15    

yohannsk a écrit :

lol j'avais pas vu, ça a mis plein de smileys.... :/
 
Merci pour ton conseil car en effet le probléme vient de là. Le script d'origine appelle un programme en perl, mais comme j'avais un doute je l'ai enlevé, je l'ai remis et ça marche pour le perl, ma syntaxe : perl /var/.../.../..../..../action.pl
 
Peux tu me dire s'il te plait comment lancer le shell?
 
J'ai mis ./..../...../..../.../action.sh mais ça marche pas lol....
 
La syntaxe ne doit pas étre bonne....
 
Merci par avnce  
 
SK


 
là ça va pas marcher :o
 
utilises des chemins absolus dans tes scripts si tu sais pas gérer l'endroit ou tu te trouves :o

Reply

Marsh Posté le 10-10-2005 à 10:57:34    

lol en fait c'était juste pour vous simplifier la lecture
J'ai mis des chemins absolu :
 
perl /var/www/html/awstats/wwwroot/cgi-bin/calvet/get_calvet.pl
 
Mais pour lancer un shell je ne connais pas la s'yntaxe et je n'arrive pas à la trouver quand on veut lancer un shell avec un chemin absolu...
 
./var/www/html/awstats/wwwroot/cgi-bin/calvet/efface.sh ????
 
Mais c'est pas ça....
 
Merci bien


---------------
Il vaut mieux se taire et passer pour un con, plutot que l'ouvrir et prouver que l'on en est bien un....
Reply

Marsh Posté le 10-10-2005 à 10:58:38    

le "./" sert à indiquer le répertoire courant donc si tu veux exécuter ton script, retire le "."
fait ls -a dans un repertoire :
tu verras :
. -> répertoire courant
.. -> répertoire parent
 
donc si tu fais cd . -> tu restes dans le même repertoire
si tu fais cd .. -> tu vas dans le répertoire parent.


Message édité par jlighty le 10-10-2005 à 11:00:20
Reply

Marsh Posté le 10-10-2005 à 11:26:42    

Ca marche lol, merci pour la syntaxe, je savais tous ça mais j'avais pas fait le rapprochement lol. Je ne suis qu'un padawan linuxien...
 
J'ai une derniére petite question si je peux abuser de votre gentillesse et de votre savoir, voici mon script perl :
 
#!/usr/bin/perl
 
#Recupere les fichiers de logs cree il y a $n jours
use strict;     #Syntaxe stricte
use Net::FTP;   #charge le module netftp
use POSIX qw(strftime);  #charge la fonction strftime
use IO::Handle;   #charge le module IOHandle
 
STDOUT->autoflush(1);  #enlever le buffer sur stdout
my $n = 0;    
 
my ($adresse,$login,$pass,$rep) = ("#####","####","#####","#####" ); #définir 4 variables, mettre my pour dire que les variables sont locales
 
my $ftp = Net::FTP->new($adresse, Debug => 0) or die "Unable to connect to $adresse\n";  #crée un nouvel objet netftp qui s'appelera $ftp
$ftp->login($login,$pass) or die "Unable to log in : $ftp->message\n";  
#méthode login sur l'objet ftp
$ftp->cwd($rep) or die "Unable to cd to $rep : $ftp->message\n";
my @lines = $ftp->ls;   #récupére chaque ligne du tableau avec le nom du fichier
 
foreach(@lines) {
  my @ftime = localtime($ftp->mdtm($_));#récupère le temps de modification du fichier courant
  my @ltime = localtime(time-$n*86400);#récupére la date d'il y a n jours
  if ($ftime[5] == $ltime[5] && $ftime[4] == $ltime[4] && $ftime[3] ==
      $ltime[3]) {
    print "Downloading $_...";
    $ftp->get($_);   #téléchargement du fichier de logs en question
    print "done\n";
  }
}
 
$ftp->quit;
 
Il est assez simple à comprendre et fonctionne trés bien pour downloader des fichier de logs, mais il les écris dans le repertoire courant.... Pourriez vous m'indiquer que dois je rajouter et ou pour copier le résultat de mon download dans un autre rep que le rep courant?
 
Je vous envoie toute ma gratitude pour votre aide mes chers.
Et votre vitesse pour répondre n'a d'égal que votre dévotion....
 
SK!!


---------------
Il vaut mieux se taire et passer pour un con, plutot que l'ouvrir et prouver que l'on en est bien un....
Reply

Marsh Posté le 10-10-2005 à 11:33:42    

quand tu fais ton get, tu peux spécifier ton fichier destination ou carrément un flux ouvert par fopen
http://kobesearch.cpan.org/htdocs/perl/FTP.html

Reply

Marsh Posté le 10-10-2005 à 11:33:42   

Reply

Marsh Posté le 10-10-2005 à 14:12:52    

Merci les amis, vous m'avez fait gagner 2 jours de recherche, en tant qu'apprenti ingé, j'ai beaucoup à apprendre encore lol
 
Pour la solution, j'ai fait plus simple, j'ai fait un cd /xxxx dans le shell avant l'ouverture du script perl lol
 
On peur mettre un résolu devant le topic!!
 
La justice et la chance sont universel! Quelqu'un vous aidera forcement un jour!!  :hello:  :bounce:


---------------
Il vaut mieux se taire et passer pour un con, plutot que l'ouvrir et prouver que l'on en est bien un....
Reply

Sujets relatifs:

Leave a Replay

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