La tâche Cron ne s'exécute pas dans Ubuntu 12.04

0

J'ai créé un travail cron dans ma console sous Ubuntu 12.04) en utilisant crontab -e:

10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh

Mais ce n'est pas en cours d'exécution. Lorsque je sauvegarde, il est installé correctement sans erreur, puis lorsque je le visualise avec, crontab -lil affiche ma crontab, mais il ne fonctionne pas à temps.

Ma dump.shcommande contient la sauvegarde de la base de données et si j'essaie de l'exécuter séparément, ce .shfichier s'exécute correctement.

Quelqu'un peut-il me dire quel est le problème?

Le contenu du dump.shcode est:

cd
cd Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
mysqldump -u root -p*** --all-databases |gzip -9  >database-$(date +%Y%m%d).sql.gz
Sathaya
la source
Alors voulez-vous que le travail cron fonctionne à 9h10? Et est-il possible de partager le contenu du dampishfichier?
JakeGould
oui, je veux lancer dump.sh, peu importe l'heure, j'ai essayé de l'exécuter à 9 h 10, mais ça ne fonctionne pas
Sathaya
Que dit votre journal Cron?
Charm_quark
@Charm_Quark: J'ai regardé les journaux, il n'y a pas de fichier journal créé pour cron, j'ai regardé dans var / log / ..
Sathaya 12/12
exporter la sortie de la tâche cron vers le problème, par exemple: 10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh >> / home / ram-pc / Desktop / bala / personal / cron.log et aussi vérifier la permission du script
Charm_quark 12/12/14

Réponses:

1

Ceci est votre travail cron et ça a l'air bien:

10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh

Mis à feu tous les jours à 9h10. Mais en regardant votre script montre le problème:

cd
cd Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
mysqldump -u root -p*** --all-databases |gzip -9 >database-$(date +%Y%m%d).sql.gz

Lorsqu'un travail cron est exécuté, il ne s'exécute pas de la même manière que vous, en tant qu'utilisateur, les chemins d'accès aux fichiers binaires ne seront pas chargés. Donc, le script n'a aucune idée où mysqldumpest. Donc, vous devriez courir whichpour comprendre ce que le chemin complet est comme ceci:

which mysqldump

Et la sortie devrait être quelque chose comme ça; en utilisant un exemple générique ici:

/usr/local/bin/mysqldump

En outre, vous devez ajouter une désignation de script en tant que première ligne du fichier pour que le shell sache quel environnement doit l'exécuter. Aussi le cdet suivants cd Desktop/bala/personalpeuvent être simplifiés à cd ~/Desktop/bala/personal. Ainsi, le tout nouveau script ressemblerait à quelque chose comme ceci:

#!/usr/bin/env bash
cd ~/Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
/usr/local/bin/mysqldump -u root -p*** --all-databases |gzip -9 >database-$(date +%Y%m%d).sql.gz

Essayez d’exécuter cela vous-même - à partir de la ligne de commande - pour voir si cela fonctionne. Et si c'est le cas, exécutez-le à nouveau depuis le cron.

JakeGould
la source
Désolé, il ne fonctionnait pas non plus.
Sathaya
: j'ai essayé votre méthode, elle fonctionnait en ligne de commande, mais pas en cron ..
Sathaya
0

Configurez le travail cron comme indiqué ci-dessous, de manière à détecter les erreurs lors de l'exécution du script, ainsi que votre nom d'utilisateur, par exemple: charm_quark.

  10 09 * * * charm_quark /home/ram-pc/Desktop/bala/personal/dump.sh >>  /home/ram-pc/Desktop/bala/personal/cron.log

Vérifiez également votre permission et vos environnements

Avant d'utiliser un script personnalisé, assurez-vous qu'il est exécutable et testez-le avec le jeu limité de variables d'environnement défini par cron. Pour répliquer l'environnement qui serait utilisé pour exécuter l'entrée cron ci-dessus, utilisez:

env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh

Référence: Chapitre 12. Configuration et réglage

Étapes de dépannage

  1. Videz le fichier dump.sh et remplacez-le par un écho

    #!/usr/bin/env bash echo "this is a test" >> /home/ram-pc/Desktop/bala/personal/test.log

  2. Vérifiez la permission du fichier .sh et changez-le.

    chmod 777 /home/ram-pc/Desktop/bala/personal/dump.sh

  3. Veuillez mettre à jour crontab pour

    * * * * * charm_quark /home/ram-pc/Desktop/bala/personal/dump.sh >> /home/ram-pc/Desktop/bala/personal/cron.log

Charm_quark
la source
Désolé, il ne fonctionne pas non plus et cron.log est vide. Aucune erreur. Si j'essaie le script cron, il s'exécute avec succès.
Sathaya
le même résultat à venir, cron.log n'a pas de données
Sathaya 12/12/14
pas de test.log n'est pas créé du tout
Sathaya
pouvez-vous s'il vous plaît montrer le, crontab, et le script, et les autorisations du fichier.
Charm_quark 12/12
777les autorisations ne sont pas bonnes. Cela devrait au moins 755permettre à l'utilisateur de lire, écrire et exécuter, mais permettre au groupe et aux autres utilisateurs de ne lire et exécuter. Et s’il s’agit du travail cron de l’utilisateur, cela pourrait (et devrait être) 700ainsi empêché de lire les informations d’identité MySQL.
JakeGould