Incompréhension sur script bash, marche pas avec cron ?!

Bonjour tout le monde,

Comme d’habitude ,j’en appel à votre générosité car je suis bloqué sur le fonctionnement d’un simple script, qui fonctionne en le lançant en console, mais qui refuse de démarrer par une tâche cron.

[code]#!/bin/sh
REPERTOIRE_SOURCE="/home/chris/“
REPERTOIRE_DESTINATION=”/media/serveur/Sauvegardes/Chris/$DATE"
FICHIER="/home/chris/Documents/Scripts/fichier_perso.lst"
SYSTEME=" /boot /etc /root"
REPSYST="/media/serveur/Sauvegardes/Chris/$DATE"
DATE=date +%d_%m_%Y_%H_%M

Détecter la présence du volume de destination et interrompre l’opération si nécessaire

if [ -d “$REPERTOIRE_DESTINATION”/$DATE ]
then
echo “Le repertoire “$REPERTOIRE_DESTINATION”/${DATE} existe deja !”;
else
mkdir “$REPERTOIRE_DESTINATION”/${DATE};
fi
rsync -acuz --stats --delete --exclude-from="$FICHIER" $REPERTOIRE_SOURCE “$REPERTOIRE_DESTINATION”/$DATE

cd $REPERTOIRE_DESTINATION
tar cvzf chris$DATE.tar.gz $DATE

Début de la sauvegarde des fichiers systèmes

echo "Début de la sauvegarde des fichiers systèmes"
sleep 5
rsync -acuz --stats --delete $SYSTEME “$REPSYST”/chris_sys$DATE
sleep 5
echo ""
echo " …TERMINER… "
echo ""
exit[/code]
La tâche cron :

14 20 * * * home/chris/Documents/Scripts/Test/backup_perso_chris.sh
celle-ci ne fonctionne pas non plus :

Le cemin et les droits du fichier :

chris@chris:~/Documents/Scripts/Test$ ls -la total 32 drwxr-xr-x 2 chris chris 4096 2008-05-12 20:04 . drwxr-xr-x 3 chris chris 4096 2008-05-12 17:13 .. -rwxr-xr-x 1 chris chris 1021 2008-05-12 19:08 backup_perso_chris.sh
/etc/crontab :

1 # /etc/crontab: system-wide crontab 2 # Unlike any other crontab you don't have to run the `crontab' 3 # command to install the new version when you edit this file 4 # and files in /etc/cron.d. These files also have username fields, 5 # that none of the other crontabs do. 6 7 SHELL=/bin/sh 8 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 9 10 # m h dom mon dow user command 11 17 * * * * root cd / && run-parts --report /etc/cron.hourly 12 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 13 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 14 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) 15 #
/var/log/syslog:

May 13 08:43:42 chris crontab[6551]: (root) BEGIN EDIT (root) 12 May 13 08:43:58 chris crontab[6551]: (root) REPLACE (root) 13 May 13 08:43:58 chris crontab[6551]: (root) END EDIT (root) 14 May 13 08:44:01 chris /usr/sbin/cron[5605]: (root) RELOAD (crontabs/root ) 15 May 13 08:44:01 chris /USR/SBIN/CRON[6555]: (root) CMD (home/chris/Documents/Scripts/Test/backup_perso_chris.sh)

  • J’ai éssayé en changeant le SHELL en : SHELL=/bin/bash
  • Il fonctionne très très bien à la mano… :laughing:

Si quelqu’un avait une merveilleuse idée :wink: :smiley: merci de votre aide !

[quote=“chris38”]La tâche cron :

(…)
Le cemin et les droits du fichier :

chris@chris:~/Documents/Scripts/Test$ ls -la total 32 drwxr-xr-x 2 chris chris 4096 2008-05-12 20:04 . drwxr-xr-x 3 chris chris 4096 2008-05-12 17:13 .. -rwxr-xr-x 1 chris chris 1021 2008-05-12 19:08 backup_perso_chris
[/quote]
Dans ta tâche cron de 20h14, il y a .sh après backup_perso_chris alors que d’après ton ls -la, il n’y a pas l’extension.

Ça doit être ça… :unamused:

[quote=“AnatomicJC”]…
Dans ta tâche cron de 20h14, il y a .sh après backup_perso_chris alors que d’après ton ls -la, il n’y a pas l’extension.

Ça doit être ça… :unamused:[/quote]

Erreur de frappe dans le post, j’ai rectifié mon 1° post.

Petit UP, car j’ai les nerfs en boules :smt003

un truc qui me saute aux yeux mais peut-être s’agit-il d’une faute de frappe c’est l’absence du “/” en début du chemin (home/chris…)

Je remplacerais

14 20 * * * home/chris/Documents/Scripts/Test/backup_perso_chris.sh

par

14 20 * * * ./home/chris/Documents/Scripts/Test/backup_perso_chris.sh

ou bien je mettrais le script dans un des répertoires défini dans le PATH (ex: /usr/local/bin) et mettrais ainsi simplement

14 20 * * * backup_perso_chris.sh

[quote=“ReNzO_08”][quote=“chris38”]

14 20 * * * home/chris/Documents/Scripts/Test/backup_perso_chris.sh
celle-ci ne fonctionne pas non plus :

/var/log/syslog:

May 13 08:43:42 chris crontab[6551]: (root) BEGIN EDIT (root) 12 May 13 08:43:58 chris crontab[6551]: (root) REPLACE (root) 13 May 13 08:43:58 chris crontab[6551]: (root) END EDIT (root) 14 May 13 08:44:01 chris /usr/sbin/cron[5605]: (root) RELOAD (crontabs/root ) 15 May 13 08:44:01 chris /USR/SBIN/CRON[6555]: (root) CMD (home/chris/Documents/Scripts/Test/backup_perso_chris.sh)
[/quote][/quote]

un truc qui me saute aux yeux mais peut-être s’agit-il d’une faute de frappe c’est l’absence du “/” en début du chemin (home/chris…)

Je remplacerais

14 20 * * * home/chris/Documents/Scripts/Test/backup_perso_chris.sh

par

14 20 * * * ./home/chris/Documents/Scripts/Test/backup_perso_chris.sh

ou

par

14 20 * * * sh /home/chris/Documents/Scripts/Test/backup_perso_chris.sh

ou bien je mettrais le script dans un des répertoires défini dans le PATH (ex: /usr/local/bin) et mettrais ainsi simplement

14 20 * * * backup_perso_chris.sh

[quote=“ReNzO_08”]…

14 20 * * * sh /home/chris/Documents/Scripts/Test/backup_perso_chris.sh

…[/quote]

Marche pas…

“Ne marche pas” est un peu vague. Enregistre les erreurs éventuelles dans un fichier et dis-nous ce qu’il contient.

[quote=“ripat”]“Ne marche pas” est un peu vague. Enregistre les erreurs éventuelles dans un fichier et dis-nous ce qu’il contient.

c’est ce que je comptais faire, mais là j’ai pas trop le temps, je serai plus explicite la prochaine fois :wink:

Pour que ton cron fonctionne, il faut lui spécifier un user sur lequel le lancer.

Ceci 14 20 * * * home/chris/Documents/Scripts/Test/backup_perso_chris.sh ne fonctionnera pas. Il manque un ‘/’ devant le home, et aucun user de spécifier aussi.

Essai ceci

[quote=“chris38”][quote=“ripat”]“Ne marche pas” est un peu vague. Enregistre les erreurs éventuelles dans un fichier et dis-nous ce qu’il contient.

c’est ce que je comptais faire, mais là j’ai pas trop le temps, je serai plus explicite la prochaine fois :wink:[/quote]

Tant que tu n’auras pas fait ça il n’y a aucun moyen de voir les erreurs générées par ton script en cron. Ça ne demande pas beaucoup de temps. En tout cas moins qu’il m’en faut pour te répondre. Il suffit de faire:

* * * * * /home/chris/Documents/Scripts/Test/backup_perso_chris.sh 2> /tmp/err_cronet une minute après, tu seras fixé en faisant:

Bon ben ca marche avec le “sh” devant la ligne…
Merci

[quote=“ripat”][quote=“chris38”][quote=“ripat”]“Ne marche pas” est un peu vague. Enregistre les erreurs éventuelles dans un fichier et dis-nous ce qu’il contient.

c’est ce que je comptais faire, mais là j’ai pas trop le temps, je serai plus explicite la prochaine fois :wink:[/quote]

Tant que tu n’auras pas fait ça il n’y a aucun moyen de voir les erreurs générées par ton script en cron. Ça ne demande pas beaucoup de temps. En tout cas moins qu’il m’en faut pour te répondre. Il suffit de faire:

* * * * * /home/chris/Documents/Scripts/Test/backup_perso_chris.sh 2> /tmp/err_cronet une minute après, tu seras fixé en faisant:

S’il à un Postfix où un Exim d’installer, il lui suffis d’avoir mis dans son cron MAILTO=root pour avoir les erreurs (si jamais il y a)
Mais comme il le lance sans erreur en ligne de commande, sa doit passer.

Se qui m’étonne c’est qu’il dit que sa fonctionne sans spécifier un user. Il est lancer par un user fantôme alors ? Où c’est le user par défaut qui est pris en compte (le sien quoi) ?

Le user par défaut