#1 Le 31/07/2013, à 10:21
- friedmann
Shell ne s’exécute pas avec crontab
Bonjour à tous,
J'ai un gros souçis que je n'arrive pas à résoudre et je me casse la tête depuis 2 jours.
J'ai un server avec Ubuntu 12.04 server.
J'ai creer un shell qui monte un disque externe, lance un backup avec backup-manager et demonte le disque externe.
Le script fonctionne à merveille, sauf quand on le lance depuis crontab.
J'ai consulté les logs, mais je n'ai aucune erreur.
Je ne comprend pas du tout.
Pour tester j'ai modifié mon script pour le faire juste monter le disque externe mais même ça ne fonctionne pas.
Voila le shell :
#!/bin/sh
#PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/script
#script
/bin/mount /dev/sdb1 /media/backup
test -x /usr/sbin/backup-manager || exit 0
/usr/sbin/backup-manager
/bin/umount /media/backup
Et la ligne inséré dans crontab :
28 10 * * * /script/mount.sh
Hors ligne
#2 Le 31/07/2013, à 10:55
- Shanx
Re : Shell ne s’exécute pas avec crontab
28 10 * * * /script/mount.sh
Ça, c’est bizarre. Dans quel répertoire est ton script ? Il ne serait pas plutôt dans ~/script/mount.sh ? (~ est un alias pour /home/ton_nom_d'utilisateur)
Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied
Hors ligne
#3 Le 31/07/2013, à 10:56
- friedmann
Re : Shell ne s’exécute pas avec crontab
Au début je l'avais placé dans mon dossier utilisateur, mais ça ne fonctionnai pas, je l'ai ensuite mis directement à la racine, mais ça ne fonctionne pas non plus.
Hors ligne
#4 Le 31/07/2013, à 10:59
- Shanx
Re : Shell ne s’exécute pas avec crontab
Là il n’est pas à la racine, il est dans le répertoire /script. Peux-tu ouvrir un terminal et nous donner le retour de cette commande :
ls -l /script
?
Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied
Hors ligne
#5 Le 31/07/2013, à 11:01
- friedmann
Re : Shell ne s’exécute pas avec crontab
-rwxr-xr-x 1 root root 226 juil. 31 11:33 mount.sh
Enfaite je parlais du dossier script, pas du fichier mount.sh.
J'ai déplacé le dossier script de mon dossier utilisateur vers la racine
Hors ligne
#6 Le 31/07/2013, à 11:06
- Shanx
Re : Shell ne s’exécute pas avec crontab
C’est franchement déconseillé de toucher à la racine. Je ne peux que te conseiller de remettre le script/ dans ton répertoire personnel, le problème ne vient pas de là. Tu peux essayer de modifier la ligne du crontab par :
28 10 * * * sh ~/script/mount.sh
EDIT : il y a aussi cette ligne qui me perturbe :
#PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/script
Si je comprend bien, c’est pour donner à l’utilisateur le droit de faire les opération du script sans être root. Bien que je n’ai jamais utilisé ça, je ne comprend pas pourquoi cette ligne est commentée. De plus, dans la doc on peut lire ça :
Selon les commandes à exécuter, vous devrez changer la variable PATH des utilisateurs ayant les droits root en mettant la ligne suivante au dessus de leurs fichiers crontab :
PATH=/usr/sbin:/usr/bin:/sbin:/bin
Du coup, je ne sais pas trop où tu devrais placer cette ligne.
Dernière modification par Shanx (Le 31/07/2013, à 11:11)
Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied
Hors ligne
#7 Le 31/07/2013, à 11:31
- friedmann
Re : Shell ne s’exécute pas avec crontab
J'ai commenté la phrase car je l'ai mise a l'origine pour tester mais comme ça n'a rien changé je l'ai commenté.
Au lieu de la supprimé et de la réinscrire a la place j'ai juste a commenté ou decommenté.
Je vais tester ce que tu m'a dis mais je pense pas que ça va fonctionner vu que j'avais déjà tenter en mettant le chemin complet du dossier utilisateur .
Hors ligne
#8 Le 31/07/2013, à 12:57
- friedmann
Re : Shell ne s’exécute pas avec crontab
J'ai tenter en modifiant la commande et en déplacant le dossier script dans l'utilisateur mais ça ne fonctionne pas.
C'est pas logique cette histoire.
Hors ligne
#9 Le 31/07/2013, à 13:43
- Neosnow
Re : Shell ne s’exécute pas avec crontab
Hello,
Quelle commande as-tu utilisé pour éditer ton crontab ?
Sinon, en lançant ton script en mode debug et en regardant les logs, on pourrait avoir un peu plus d'infos sur ce qu'il se passe.
Pour info :
Activer le mode debug
#!/bin/sh
set -x
/bin/mount /dev/sdb1 /media/backup
test -x /usr/sbin/backup-manager || exit 0
/usr/sbin/backup-manager
/bin/umount /media/backup
set +x
Les logs de cron se trouvent dans syslog
grep CRON /var/log/syslog
Hors ligne
#10 Le 31/07/2013, à 13:48
- friedmann
Re : Shell ne s’exécute pas avec crontab
J'ai trouver l'erreur.
Un truc tout bête mais sur aucun tuto de tous ce que j'ai lu, ne mentionne le fait que pour editer crontab il faille utiliser la commande sudo.
Bon ben finalement c'était tout bête mais ça m'aura coûté 10 heures de travail
Hors ligne
#11 Le 31/07/2013, à 15:03
- Neosnow
Re : Shell ne s’exécute pas avec crontab
En fait, il n'y a pas besoin d'utiliser sudo pour le crontab étant donné qu'il est relatif à l'utilisateur qui l'exécute. Ainsi, en utilisant crontab avec sudo, tu édites le crontab de root. Alors que sans sudo, c'est ton propre crontab que tu édites.
Dans ton cas, ça a résolu le problème car ton script appartient à root (les commandes que tu utilises ont, par ailleurs, aussi besoin d'être en root). Tu essayais donc de lancer un script en root sans être root, ça marchait pas bien du coup
Hors ligne
#12 Le 31/07/2013, à 15:06
- friedmann
Re : Shell ne s’exécute pas avec crontab
OK j'aurais encore appris quelque chose.
Merci beaucoup.
Hors ligne