Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/04/2008, à 07:43

Ch'Portos

[Résolu] Commande CRON qui ne marche pas ???

Bonjour !

J'ai un petit problème avec une bête commande CRON qui veut pas fonctionner.
Voilà ce que j'ai fait dans mon /etc/crontab :

59 23   * * *   root    mv /var/www-app/stagel5/phpfreechat/data/private/logs/*/chat.log /var/www-app/stagel5/phpfreechat/data/private/logs/backup/`date +%y%m%d`.log

le principe : déplacement en fin de journée d'un fichier de log d'un emplacement à l'autre avec renommage du fichier sous format "YYMMDD.log" (pour que tri par nom = tri par date wink)

Mais voilà, cette commande me renvoie une erreur (par mail) :

/bin/sh: Syntax error: EOF in backquote substitution

J'en déduis qu'il y a un problème avec le "`date +%y%m%d`", mais je vois pas trop où ...

Une idée ?

Merci d'avance !
Ch'Portos.

Dernière modification par Ch'Portos (Le 22/04/2008, à 08:09)

Hors ligne

#2 Le 17/04/2008, à 12:55

rego

Re : [Résolu] Commande CRON qui ne marche pas ???

-A quoi correspond le 'root' de ton fichier crontab?

As tu essayer cette commande à la main ?

Hors ligne

#3 Le 17/04/2008, à 14:20

johnlege

Re : [Résolu] Commande CRON qui ne marche pas ???

Bonjour,
Pourquoi ne lances tu pas un shell qui lancerait ta commande ?
Cela te permettrait de tester et d'enrichir ta commande au fur et à mesure ?
Je n'utiliserais pas d'étoile sur la ligne de commandes dans la crontab, elles sont utilisées pour déterminer les paramètres d'heures, minutes, jours, etc...
Lorsque tu effectues un mv avec un joker il faut que ton dernier paramétre soit un répertoire si le joker renvoie plusieurs fichiers, sinon cela risque de mal fonctionné.
Habituellement la commande date s'écrit :

date '+%y%m%d'

et pour avoir une variable

AAMMJJ=`date '+%y%m%d'`

Merci d'indiquer résolu dans le titre quand c'est résolu

Hors ligne

#4 Le 18/04/2008, à 07:40

Ch'Portos

Re : [Résolu] Commande CRON qui ne marche pas ???

rego a écrit :

-A quoi correspond le 'root' de ton fichier crontab?

Le "root" permet de spécifier avec quel utilisateur cela va être réalisé (donc ici le super-utilisateur). J'ai simplement recopié une ligne au dessus en changeant simplement la commande (dernière "case" de la ligne)

rego a écrit :

As tu essayer cette commande à la main ?

Biensûr, c'est même cette commande que je réalise à la mimine tous les matins (vu que ça le fait pas automatiquement

johnlege a écrit :

Pourquoi ne lances tu pas un shell qui lancerait ta commande ?
Cela te permettrait de tester et d'enrichir ta commande au fur et à mesure ?

Ben ... la commande étant simplismes (enfin je croyais) je ne pensais pas devoir créer un fichier de script pour une simple commande, et elle réalise tout ce dont j'ai besoin en fait

johnlege a écrit :

Lorsque tu effectues un mv avec un joker il faut que ton dernier paramétre soit un répertoire si le joker renvoie plusieurs fichiers, sinon cela risque de mal fonctionné.

Le joker placé dans la commande me permet d'éviter de devoir recopier le nom du dossier de log provenant d'une signature MD5 (je te laisse imaginer le format avec plein de lettres et de chiffres), mais je te rassure, il n'y a qu'un dossier, et dans ce dossier un seul fichier "chat.log"

Il me semble que le problème vienne réellement de

`date +%y%m%d`

au vu du message d'erreur retourné ("EOF in backquote substitution" => "Fin de fichier dans la substitution entre guillemets")

Autre idée ? hmm

Merci d'avance !
Ch'Portos.

Hors ligne

#5 Le 18/04/2008, à 10:16

atlante

Re : [Résolu] Commande CRON qui ne marche pas ???

Eviter d'utiliser une commande dans le crontab permet d'éviter ce genre de problème.
Crée un script qui contiendra cette commande et utilise le crontab pour lancer ce script. Ca permet plusieurs choses:
- mettre des "echo" un peu partout pour voir l'évolution du script et où se trouve l'erreur
- rediriger les sorties pour garder des traces
- ne pas utiliser de caractères pouvant poser problème au cron dans la commande
- Ne pas se taper la ligne à la main si tu dois la lancer manuellement, juste lancer le script

Ton problème ne vient pas forcément de la ligne de date, même s'il semble que c'est la seule à utiliser des guillemets.

Hors ligne

#6 Le 21/04/2008, à 08:12

Ch'Portos

Re : [Résolu] Commande CRON qui ne marche pas ???

Bonjour,

J'ai créé un script contenant ceci :

#!/bin/sh
COMMON_FOLDER="/var/www-app/stagel5/phpfreechat/data/private/logs/"
FOLDER1="cbf08f2708cc20a7daa8e04019b1c61f/chat.log"
FOLDER2="backup/"
AAMMJJ=`date '+%y%m%d'`

mv $COMMON_FOLDER$FOLDER1 $COMMON_FOLDER$FOLDER2$AAMMJJ.log

A l'exécution (à la mimine) pas de problème, je vous dirai demain si avec cron c'est passé !

Hors ligne

#7 Le 22/04/2008, à 08:08

Ch'Portos

Re : [Résolu] Commande CRON qui ne marche pas ???

Bon, c'est passé !

Merci !!

Hors ligne

#8 Le 24/04/2008, à 03:49

garnier

Re : [Résolu] Commande CRON qui ne marche pas ???

Salut,

je tombe sur ton message, il est possible de parvenir à tes fins directement dans la crontab en echapant les differents elements de la chaîne de format de la commande date :

37 * * * *  (JJMMAAHH=`date +"\%d\%m\%y\%H"`; cp ~/lecture.log ~/lecture.log${JJMMAAHH} )

Il est également possible de faire plus condensé ( je ne recommande pas car bonjour la lecture cool ) :

46 * * * *  cp ~/lecture.log ~/lecture.log`date +"\%d\%m\%y\%H\%s"`

cordialement benoit

#9 Le 24/10/2008, à 00:09

Simon Valiquette

Re : [Résolu] Commande CRON qui ne marche pas ???

Juste pour être certain que tout le monde comprend bien ce qui se passe, la raison du problème est que cron remplace les '%' par des caractères de changement de ligne (l'équivalent de \n).

Dans le cas de qqc comme `date +%y%m%d`, cron exécute en fait:

`date +
y
m
d`

et cela nous donne évidemment le message d'erreur très peu intuitif "Syntax error: EOF in backquote substitution".

Il faut donc tout simplement écrire \% pour chaque %.  La section fautive de la ligne devient ainsi: `date +\%y\%m\%d`

Pour les curieux, cette substitution des '%' est utile dans de nombreux cas, dont voici un exemple évident tiré de man 5 crontab:

0 22 * * 1-5   mail -s "Il est 22 h" joe%Joe,%%Où sont tes enfants ?%

Simon Valiquette