Problème de lancement d'un script avec CRON

Salut,
J’ai un script que j’utilise depuis un moment et, je ne sais pour quelle raison obscure, le script me renvoie une erreur quand j’essaye de la lancer avec un CRON…

[code]# crontab -e

Fichiers Xtiers

30 16 * * * /usr/local/bin/isalo.sh >/dev/null 2>/dev/null
0 22 * * * /usr/local/bin/isalo.sh >/dev/null 2>/dev/null[/code]

Par contre en ligne de commande, ça roule:

Le script (au cas ou…).
Il s’agit d’une ouverture de tunnel + rsync + fermeture de tunnel sur deux machines distantes:

[code]#!/bin/bash

YEAR="$(date +%Y)“
FROMA=”/mnt/cifs/A/c/chemin"
FROMB="/mnt/cifs/B/c/chemin"
TOA="/var/www/A"
TOB="/var/www/B"
YEARA="$TOA/$YEAR"
YEARB="$TOB/$YEAR"
[ ! -d $YEARA ] && mkdir -p $YEARA || :
[ ! -d $YEARB ] && mkdir -p $YEARB || :

PIDFILE=/var/run/remote.pid
DIR=/etc/openvpn/remote
CONF=remote.conf

LOG=$(tempfile) ;

cd $DIR
openvpn --writepid $PIDFILE --daemon --config $CONF
sleep 15

Test VPN

ping -c3 10.0.0.2 > /dev/null
TEST=$?

if [ $TEST -ne 0 ]
then
echo -n "Erreur : " >> $LOG 2>&1 ;
echo “” >> $LOG 2>&1 ;
echo -n “Pas de connexion VPN !!!” >> $LOG 2>&1 ;
mailx -s “Erreur Script” -r admin@domaine.tld admin@domaine.tld < $LOG ;
exit 0
else
echo -n “Connexion VPN OK” >> $LOG 2>&1 ;
echo “” >> $LOG 2>&1 ;
echo “================” >> $LOG 2>&1 ;
fi

Vérification up A

PING_NUM=ping -n -c 10 10.10.0.1|grep received|awk '{ print $4 }'
if [ $PING_NUM -gt 5 ];
then
mount -t cifs -o username=monnom,passwd=monmotdepasse //10.10.0.1/c /mnt/cifs/A/c/
rsync -abuv “$FROMA”/XTIERS.DBF “$TOA”/XTIERS.DBF >> $LOG 2>&1 ;
rsync -abuv “$FROMA”/"$YEAR"/CA* “$YEARA”/ >> $LOG 2>&1 ;
rsync -abuv “$FROMA”/"$YEAR"/FA"$YEAR"* “$YEARA”/ >> $LOG 2>&1 ;
umount /mnt/cifs/A/c/
else
echo “” >> $LOG 2>&1 ;
echo “== Erreur ==” >> $LOG 2>&1 ;
echo “=> Pas de connexion à RRI” >> $LOG 2>&1 ;

Vérification up B

PING_NUM=ping -n -c 10 10.10.0.2|grep received|awk '{ print $4 }'
if [ $PING_NUM -gt 5 ];
then
mount -t cifs -o username=monnom,passwd=monmotdepasse //10.10.0.2/c /mnt/cifs/B/c/
rsync -abuv “$FROMB”/XTIERS.DBF “$TOB”/XTIERS.DBF >> $LOG 2>&1 ;
rsync -abuv “$FROMB”/"$YEAR"/CA* “$YEARB”/ >> $LOG 2>&1 ;
rsync -abuv “$FROMB”/"$YEAR"/FA"$YEAR"* “$YEARB”/ >> $LOG 2>&1 ;
umount /mnt/cifs/B/c/
else
echo “” >> $LOG 2>&1 ;
echo “== Erreur ==” >> $LOG 2>&1 ;
echo “=> Pas de connexion à JDR” >> $LOG 2>&1 ;
fi

echo “” >> $LOG 2>&1 ;
echo -n “Arrêt du tunnel openvpn…” >> $LOG 2>&1 ;
PID=cat $PIDFILE
kill $PID
rm $PIDFILE

if grep -q “Erreur” $LOG
then
mailx -s “Erreur Script” -r admin@domaine.tld admin@domaine.tld < $LOG ;
exit 1
else
mailx -s “Succès backup” -r admin@domaine.tld admin@domaine.tld < $LOG ;
fi

exit 0[/code]

Bonjour,

As tu essayé

30 16 * * * /bin/sh -c "/usr/local/bin/isalo.sh"

Avec de numéro/message d’erreur ça nous aiderais :unamused:

Salut,

[quote=“yap22”]Bonjour,

As tu essayé

30 16 * * * /bin/sh -c "/usr/local/bin/isalo.sh" [/quote]
J’essaye, réponse à 15h30 (je n’ai pas la possibilité de me connecter avant…

C’est le script qui renvoie l’erreur, ça aide pas trop.

Erreur : Pas de connexion VPN !!!

[quote=“lol”]…

Fichiers Xtiers

30 16 * * * /usr/local/bin/isalo.sh >/dev/null 2>/dev/null
0 22 * * * /usr/local/bin/isalo-2.sh >/dev/null 2>/dev/null[/code]

[/quote]
Je ne pense pas que cron aime deux commandes identiques.
As-tu essayé de faire un clone du fichier “isalo.sh” que tu nommes “isalo-2.sh”, par exemple et que tu mets sur la seconde ligne ?

Pas mieux avec /bin/sh -c :wink:

[quote]Erreur :
Pas de connexion VPN !!![/quote]
C’est soit le lancement du tunnel soit le test qui déconne quand c’est lancé avec CRON. Je ne comprend pas… :017

Edit: C’est une tâche qui fonctionnait très bien sous Squeeze.

[quote=“ricardo”]Je ne pense pas que cron aime deux commandes identiques.[/quote]Ha. J’ai plein de tâches identiques à des heures différentes, ça passe sans soucis.
D’ailleurs, la tâche est bien lancée.

Re,
Je ne comprend pas… La tâche se lance bien

Aug 9 16:13:01 mail /USR/SBIN/CRON[25173]: (root) CMD (/usr/local/bin/isalo.sh >/dev/null 2>/dev/null) ... Aug 9 16:17:01 mail /USR/SBIN/CRON[25838]: (root) CMD (/bin/sh -c "/usr/local/bin/isalo.sh")

Mais rien sur le VPN dans les logs. Alors que quand je lance manuellement le tunnel est bien ouvert.
C’est donc de ce côté qu’il faut que je cherche…

Désolé si je réfléchi à voix haute… :wink:

Quand tu lances le script à la main, il est exécuté par /bin/bash

Mais en est-on sûr avec Cron? Si cela se trouve c’est /bin/sh et non /bin/bash qui l’exécute (malgré le shebang?)

plus d’infos avec

on peut spécifier le shell à utiliser

Penser à vérifier aussi la variable PATH dans le crontab

Salut

[quote=“agentsteel”]Penser à vérifier aussi la variable PATH dans le crontab[/quote]J’avais vérifié le path:root@mail:~# grep PATH /etc/crontab PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Quant au shell:root@mail:~# grep SHELL /etc/crontab SHELL=/bin/sh
J’ai peur de foutre en l’air toutes les autres tâche en changeant le SHELL. Je vais quand même essayer.

Merci

Salut,
C’était un simple problème de path… :blush:

J’ai ajouté cette ligne:

crontab -e ... PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Je suppose que ça a un rapport avec ça dans

/etc/init.d/cron ... PATH=/bin:/usr/bin:/sbin:/usr/sbin

C’est drôle de pas avoir mis /usr/local/bin dans le path par défaut…

[quote=“lol”]…

C’est drôle de pas avoir mis /usr/local/bin dans le path par défaut…[/quote]
Bizarre, chez moi, il y est … mais si ça tombe, c’est moi qui l’y ai ajouté car j’ai depuis très longtemps des scripts perso dans ce dossier :017

Salut,

[quote=“ricardo”][quote=“lol”]…

C’est drôle de pas avoir mis /usr/local/bin dans le path par défaut…[/quote]
Bizarre, chez moi, il y est … mais si ça tombe, c’est moi qui l’y ai ajouté car j’ai depuis très longtemps des scripts perso dans ce dossier :017[/quote]

Exactement! Dans le paquet wheezy (je viens de vérifier) le path est juste sur ça:PATH=/bin:/usr/bin:/sbin:/usr/sbin