bonjour,
je fais un script dans le fichier fichier.sh sur unix, quand je fais excuter fichier.sh manuellement, il marche très bien. Mais quand je le fais mon crontab, il n'est pas exécuté ( il ne marche pas ).
sincères remerciments
lastmagik
bonjour,
je fais un script dans le fichier fichier.sh sur unix, quand je fais excuter fichier.sh manuellement, il marche très bien. Mais quand je le fais mon crontab, il n'est pas exécuté ( il ne marche pas ).
sincères remerciments
lastmagik
C'est sûrement dû au fait que crontab ne lance pas les scripts dans le même environnement que celui de l'utilisateur.
- Voir le manuel de crontab (man crontab).
- Un aperçu du script permettrait de mettre le doigt sur ce qui cloche.
bonjour fransoo,
ci-dessous le le script, dans fichier.sh
file1=`ls -ltr | awk -F" " '{print $9}' | tail -1`
grep "AB" $file1 >> file2
exit
et ci dessous le crontab
58 * * * * /osp/psmf/hds/apache/logs/ttin_test.sh
beaucoup de mercis
lastmagik
et ci dessous le vraie crontab
58 * * * * /osp/psmf/hds/apache/logs/fichier.sh
merci bcp
lastmagik
C'est plus lisible avec les 'code tags' (#)
j'ajouterais un "cd /osp/psmf/hds/apache/logs" (si c'est bien là qu'on doit faire le 'ls' et que se trouve "file2") au début pour assurer le coup.
Il faudrait chercher un "file2" dans le répertoire personnel (/home/<user>) car je crois que c'est là qu'on a des chances de le trouver...
bonjour fransoo,
au début de mon script j'ai fait
et le script marche bien mais dans le cript il rencontre
Code : Sélectionner tout - Visualiser dans une fenêtre à part cd /osp/psmf/hds/apache/logs
il n'éxécute pas cette condition ! ?? pourtant manuellement le script marche correctement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if [ $vZebra2 -ne 0 ] then ... ..... else ... ..... fi
merci beaucoup
lastmagik
bonjour fransoo,
j'ai un code fichier.sh qui s'éxécute bien manuellement mais il ne s'execute pas correctement avec crontab.
Suite à ton conseil j'ai fait au début de mon code
alors maintenant dans mon crontab le code mache très bien.cd /osp/psmf/hds/apache/logs
Mais le probleme c'est que quand il rencontre mon instruction de condition if il s'arrête.
je ne comprend pas pourquoi manuellement çà marche, mais avec crontab çà marche aussi mais quand il rencontre mon instruction de condition if il s'arrête ?let vZebra2=`wc -l fileZebra2 | awk -F" " '{print $1}'`
if [ $vZebra2 -ne 0 ]
then
... .....
else
... .....
fi
merci beaucoup
lastmagik
Pourrait avantageusement être remplacé par
Ce qui évite un appel à awk (qui n'est sûrement pas dans le PATH quand le script est lancé par cron).
Code : Sélectionner tout - Visualiser dans une fenêtre à part vZebra2=$(wc -l <fileZebra2)
Accessoirementpeut s'écrire avec l'évaluation arithmétique:
Code : Sélectionner tout - Visualiser dans une fenêtre à part if [ $vZebra2 -ne 0 ]
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ((vZebra2))
Pour mes futurs codes j'ai besoin de utiliser awk
Que dois je faire dans mon code ci-dessous pour que crontab retrouve le chemin avec awk
est ce que cette forme d expression ci-dessous n est pas compatible avec crontab
Code : Sélectionner tout - Visualiser dans une fenêtre à part let vZebra2=`wc -l /osp/psmf/hds/apache/logs/fileZebra2 | awk -F" " '{print $1}'`
sincères remerciments
Code : Sélectionner tout - Visualiser dans une fenêtre à part if [ $vZebra2 -ne 0 ]
lastmagik
il n 'a pas marché avec
il n'a pas marché avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part vZebra2=$(wc -l <fileZebra2)
c 'est important de faire which awk pouras tu me monter comment on fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part let vZebra2=`awk -F" " '{print $1}' /osp/psmf/hds/apache/logs/fileZebra3`
sincères remercimentswhich awk ..... ??
lastmagik
Bonjour,
Dans un script lance en crontab, toutes les commandes doivent etre appelees via leur chemin absolu. C'est a dire que tu ne dois pas avoir 'ls', mais '/usr/bin/ls'.
La commande which, suivie d'une autre commande, te permet de savoir quel est le chemin absolu vers cette seconde commande. Ainsi, 'which ls' te retournera '/usr/bin/ls'.
Montre-nous tout le script que tu appelles, ca sera plus simple pour t'aider.
bonjour gangsoleil et fransoo,
ps : alors que excuter manuellement le tout marche correctement.
Mais avec crontab je pense que c'est son awk qui ne marche pas
merci de trouver ci-dessous le code que j'ai fait
sincères remerciments
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 cd /osp/psmf/hds/apache/logs fileZebra1=`ls -ltr | awk -F" " '{print $9}' | tail -1` vZebra1=`date | awk -F" " '{print $3$2$6}'` grep $vZebra1 $fileZebra1 | awk -F" " '{if ($6>0) print $0}' > /osp/psmf/hds/apache/logs/fileZebra2 wc -l /osp/psmf/hds/apache/logs/fileZebra2 > /osp/psmf/hds/apache/logs/fileZebra3 let vZebra2=`/usr/xpg4/bin/awk -F" " '{print $1}' /osp/psmf/hds/apache/logs/fileZebra3` # ici awk n'a pas marché, alors il n y a pas de valeur dans $vZebra2 echo $vZebra1 > /osp/psmf/hds/apache/logs/txt.jmi echo $vZebra2 >> /osp/psmf/hds/apache/logs/txt.jmi # dans txt.jmi la valeur de $vZebra2 ne se trouve pas dans txt.jmi echo "test" >> txt.jmi exit
lastmagik
Bonjour,
Essaye de remplacer tous les appels a ls, grep, tail, wc, awk ... par des appels avec le chemin absolu, comme conseille precedemment. Ca devrait deja pas mal aider.
bonjour gangsoleil,
ps : je suis sur unix
avec :
which echo
/usr/bin/echo
which grep
/usr/xpg4/bin/grep
ne marche pas sur crontab
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /usr/xpg4/bin/cd /osp/psmf/hds/apache/logs fileZebra1=`/usr/xpg4/bin/ls -ltr | usr/xpg4/bin/awk -F" " '{print $9}' | usr/xpg4/bin/tail -1` vZebra1=`usr/xpg4/bin/date | usr/xpg4/bin/awk -F" " '{print $3$2$6}'` usr/xpg4/bin/grep $vZebra1 $fileZebra1 | usr/xpg4/bin/awk -F" " '{if ($6>0) print $0}' > /osp/psmf/hds/apache/logs/fileZebra2 /usr/bin/wc -l /osp/psmf/hds/apache/logs/fileZebra2 > /osp/psmf/hds/apache/logs/fileZebra3 let vZebra2=`/usr/xpg4/bin/awk -F" " '{print $1}' /osp/psmf/hds/apache/logs/fileZebra3` # c est toujours ici awk n'a pas marché, alors il n y a pas de valeur dans $vZebra2 /usr/bin/echo $vZebra1 > /osp/psmf/hds/apache/logs/txt.jmi /usr/bin/echo $vZebra2 >> /osp/psmf/hds/apache/logs/txt.jmi # dans txt.jmi la valeur de $vZebra2 ne se trouve pas dans txt.jmi /usr/bin/echo "test" >> txt.jmi exit
la valeur de $vZebra2 n'est pas dans le fichier txt.jmi
mais manuellement çà marche !!
sincères remerciments
lastmagik
bonjour fransoo et gangsoleil,
j'ai suivi les conseils de fransoo mentionnés un peu plus haut de cette discussion.
maintenant tout marche bien.
merci beaucoup à fransoo et gangsoleil
sincères remerciments
lastmagik
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager