Script bash qui ne s'execute pas avec la crontab

Salut,

j’ai 2 scripte de backup mais 1 des 2 ne se lance pas :

54 16 * * * bash /mnt/backup/backup/backup_v7.sh

le script est comme ca :

[code]#!/bin/bash

#Init des variables
pingErr=1
rsyncErr=1
count=0

#on récupere le PID du script
PID=$$

Création du fichier log

echo date +"%d.%m.%Y %H:%M:%S" >> rsync_ssh.log

#Début du programme
while [[ $pingErr != 0 && $rsyncErr != 0 ]] # Test si des erreurs on lieu ou pas (ping ou rsync pendant le transfer)
do
ping -c 1 xxx.noip.me #
pingErr=$? # (erreur ou pas de ping)
if [[ $pingErr != 0 ]] # Si il y a une erreur de ping
then
echo “down, waiting !!!” # message d’erreur
let count=count+1 # on incrémente count
if [[ $count = 3 ]] # si apres 3 essais on ne ping toujours pas
then
echo “connexion error” >> rsync_ssh.log # message d’erreur
echo “transfert non effectué après $count tentatives” >> rsync_ssh.log # sortie sans backup
echo “” >> rsync_ssh.log # séparation des log
echo $PID # Affiche le PID
kill $PID # Kill le script
fi
sleep 3s # Attente avant re-controle de connexion
else # Début de transfert
echo “Réponse au ping apres $count tentatives” >> rsync_ssh.log
echo "Début de transfert"
rsync -av --exclude-from ‘exclude.txt’ --timeout=20 -e “ssh -i /home/jim/.ssh/id_rsa” /home/ jim@xxx.noip.me:/media/backup
rsyncErr=$?
fi
done

fin du script

Les infos sont enregistrées dans un Log

echo “Transfer complet sans erreur” >> rsync_ssh.log
echo “Transfer OK” >> rsync_ssh.log

création d’une ligne vide pour séparer les infos journalières de backup.log

echo “” >> rsync.log
[/code]

le scripte fonctionne manuellement par ./backup_v7.sh
le chemin est correcte il se lance aussi par bash /mnt/backup/backup/backup_v7.sh dans la console

je vois rien dans les log je pense qu’il n’aime pas une commande dans mon script ?

si je redirige tout ca dans un error.log je vois :

[code]cat error.log
PING xxx.noip.me () 56(84) bytes of data.
64 bytes from xxx): icmp_req=1 ttl=44 time=258 ms

xxx.noip.me ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 258.541/258.541/258.541/0.000 ms
Début de transfert
[/code]

donc il le lance mais il ne doit pas executer les commandes qui suivent …

Merci

Bonjour et bonne année :114 ,

As-tu pensé à ajouter un utilisateur ayant les droits suffisants pour exécuter ton script, genre root ?

54 16 * * * root bash /mnt/backup/backup/backup_v7.sh

J’imagine que oui et que ma réponse est (probablement) à côté de la plaque (la crontab devrait être exécutée par root par défaut me semble-t-il)…

Si tu veux être sûr que ton script s’exécute jusqu’au bout tu n’as qu’à ajouter une création de fichier avec la date du jour à la fin du script :

touch /home/TonUser/VerifScript_$(date).txt

et juste ensuite un petit :

exit 0

ou alors lorsque tu incrémentes tes logs tu ajoutes :

echo "connexion error $(date)" >> rsync_ssh.log
echo "transfert non effectué après $count tentatives $(date)" >> rsync_ssh.log

echo "Transfer complet sans erreur $(date)" >> rsync_ssh.log echo "Transfer OK $(date)" >> rsync_ssh.log

Moi c’est ce que je ferais.

Pour rsync je te conseille de regarder ici :
https://www.digitalocean.com/community/tutorials/how-to-copy-files-with-rsync-over-ssh

A+

Vérifie les variables d’environnement d’exécution de ce script, et plus particulièrement la variable [mono]$PATH[/mono]

Il se pourrait que le chemin d’une des commandes que tu utilise dans ce script ne fasse pas partie des chemins listés dans le PATH utilisé par ce script.

Tu pourrais aussi bien t’en passer en spécifiant le chemin absolu de ces commandes :
Par exemple, dans ton script, remplace [mono]rsync[/mono] par le retour de la commande :which rsync
Même chose pour la commande [mono]ssh[/mono]

j’ai ajouté PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/mnt/backup/backup

which rsync
/usr/bin/rsync

which ssh
/usr/bin/ssh

mais ca ne change rien et dans ma crontab j’ai un autre script rsync mais local qui fonctionne bien. SSH semble être le soucis. Dans mes log forcés je vois qu’il arrive “Début de transfer…”

mais je vois en quoi SSH poserait problème dans la crontab et pas directement dans le shell…

Histoire de vérivier le PATH et autres variables, essaye de ne mettre que la commande suivante dans un fichier script appelé par [mono]crond[/mono]env > /home/michel/recupCron.txtet vérifie ce qui s’est écrit dans le fichier [mono]/home/michel/recupCron.txt[/mono] (Bien sûr, tu remplace “michel” par le nom de ton compte utilisateur.)

Tu verra que shebang ou pas, c’est [mono]/bin/sh[/mono] (lien symbolique vers [mono]/bin/dash[/mono]) qui exécute le script, et pas [mono]/bin/bash[/mono]

=======
Tu redirige les sorties de certaines commandes vers les fichier [mono]rsync_ssh.log[/mono] et [mono]rsync.log[/mono]
mais il aurait fallu indiquer le chemin absolu de ces fichier <=> depuis la racine du système.

=======
Dans ton script, tu utilise aussi [mono]ssh[/mono] mais je ne suis pas sûr que [mono]crond[/mono] (qui lance le script)
puisse avoir accès au serveur de clefs ssh (ssh-agent) depuis ton compte utilisateur.