J'ai le travail cron
suivant:
* * * * * /home/db_backups/test.sh
qui fonctionne bien et est exécuté chaque minute. Si je vérifie avec Sudo grep \(CRON\) /var/log/syslog
j'obtiens ce qui suit:
Jun 23 11:30:01 analytics CRON[9301]: (CRON) info (No MTA installed, discarding output)
Toutefois, si je modifie le fichier exécutable en inreadobase_backup.sh
:
* * * * * /home/db_backups/inreadobase_backup.sh
le script n'est pas exécuté - je ne vois aucun enregistrement dans le journal. Le fichier exécutable, s'il est exécuté par lui-même, fait le travail sans erreur. Voici le contenu du fichier:
Sudo mysqldump -h example.com -u username -ppassword dbname | gzip > db.Zip
Les deux fichiers exécutables ont des autorisations d'exécution accordées à tout le monde. Où devrais-je regarder pour identifier le problème?
EDIT
Le travail s'exécute et crée des sauvegardes avec succès si j'ajoute à Sudo crontab -e
la ligne suivante:
*/5 * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.Zip
Toutefois, si je déplace la ligne d'exécution mysqldump... db.Zip
vers le fichier inreadobase_backup.sh
et le spécifie pour le travail:
*/5 * * * * /home/db_backups/inreadobase_backup.sh
le travail ne crée pas de sauvegardes. Je ne sais pas comment vérifier s'il fonctionne et quelle erreur il génère, le cas échéant. Si j'exécute simplement /home/db_backups/inreadobase_backup.sh
en ligne de commande, la sauvegarde est créée. Et la seule ligne que le fichier contient est la suivante:
mysqldump -h example.com -u username -ppassword dbname | gzip > db.Zip
Je suppose que vous avez ajouté ceci en tant que crontab de votre propre utilisateur. Le problème est que cron
n'a aucun moyen de s'authentifier auprès de Sudo
et qu'il ne peut donc pas exécuter votre commande. La solution la plus simple consiste à ajouter la crontab au compte de root
:
Sudo crontab -e
Ensuite, ajoutez cette ligne:
* * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.Zip
Il n'est pas nécessaire d'avoir un script pour quelque chose d'aussi simple, vous pouvez donc aussi ajouter la commande elle-même. De toute façon, vous ne voulez pas utiliser Sudo
avec elle.
Pour exclure diverses complications possibles, donnez à inreadobase_backup.sh
l'apparence suivante:
#!/bin/sh
/usr/bin/mysqldump -h example.com -u username -ppassword dbname | /bin/gzip > /home/maximus/db.Zip
Ensuite, pour capturer les erreurs éventuelles, redirigez la sortie d'erreur du script vers un fichier en ajoutant 2> file
à votre ligne cron
:
*/5 * * * * /home/db_backups/inreadobase_backup.sh 2> /tmp/cron.error
Vous pouvez ensuite vérifier /tmp/cron.error
pour plus de détails.