J'ai le script bash suivant:
#!/bin/bash
mysqldump -u ******** -p******** --all-databases | gzip > /home/srvlinux01/MySQLBackups/database_$(date +\%Y-\%m-\%d).sql.gz
qui se trouve dans /home/srvlinux01/MySQLBackups/
en tant que backup.sh
avec les autorisations suivantes
-rwxr--r-- 1 root root 134 feb 27 12:48 backup.sh
J'ai configuré un cronjob sur Sudo crontab -e
pour l'exécuter tous les jours, la nuit
#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
Mais je reçois par email l'erreur suivante:
sh: 0: Can't open /home/srvlinux01/MySQLBackups/backup.sh
J'ai essayé différentes configurations, mais je ne peux pas comprendre ce qui ne va pas. Je peux exécuter le script manuellement et tout se passe à la perfection, alors je suppose qu'il y a un problème avec mon entrée dans cronjob, mais je ne peux pas vraiment comprendre quoi. Pourriez-vous s'il vous plaît m'aider à comprendre? Merci!
Vous devez donner à votre cron un PATH
. Par exemple:
Shell=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin
Dans votre cas, essayez de mettre ceci avant votre commande. Consultez le wiki de la communauté dans cette question pour plus d'informations sur les raisons pour lesquelles la variable PATH
est nécessaire. Voici un extrait; essentiellement l'idée est que cron ne lit pas /etc/environment
:
Un "gotcha" commun est que la variable d'environnement PATH est différente. Peut-être que votre script cron utilise la commande
somecommand
qui se trouve dans/opt/someApp/bin
, que vous avez ajoutée àPATH
dans/etc/environment
? cron ne lit pas ce fichier, donc exécutersomecommand
à partir de votre script échouera s'il est exécuté avec cron, mais fonctionnera s'il est exécuté dans un terminal. Pour contourner ce problème, définissez simplement votre propre variablePATH
en haut du script.
chmod +x /home/srvlinux01/MySQLBackups/backup.sh
essayez d'exécuter votre script avec un chemin complet sur la ligne de commande:
/home/srvlinux01/MySQLBackups/backup.sh
s'il n'est pas en cours d'exécution - quelque chose ne va pas (erreur de chemin)
Assurez-vous que c'est votre crontab
crontab -e
non Sudo:
Sudo crontab -e
est root crontab - et root ne peut pas trouver votre script;)
supprimer "sh" dans crontab suffit d'écrire:
30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
Je peux voir une erreur dans la configuration de votre fichier crontab. Dans la configuration ci-dessous, vous essayez d'appeler backup.sh
comme dans votre invite de shell avec le préfixe sh
qui risque de ne pas fonctionner dans cron.
#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
chmod a + x <nom du fichier>
Mettez à jour votre crontab pour refléter cela. (appelant le fichier directement, Shell est utilisé conformément à la ligne Shebang dans le fichier)
#Automatic MySQL backup
30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
J'espère que cela aiderait.