Les crons font des cronneries - Linux et OS Alternatifs
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.
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
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
Marsh Posté le 10-10-2005 à 10:49:15
yohannsk a écrit : lol j'avais pas vu, ça a mis plein de smileys.... |
là ça va pas marcher
utilises des chemins absolus dans tes scripts si tu sais pas gérer l'endroit ou tu te trouves
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
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.
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!!
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
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!!
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/binbinvar/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/binbinvar/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....