web-dev-qa-db-fra.com

sudo Crontab ne fonctionne pas mais crontab? :)

J'utilise Crontab sur mon utilisateur pour exécuter beaucoup de scripts curl, ils fonctionnent bien, 40 d'entre eux fonctionnent.

Mais les scripts que j'ai à la racine 'Crontab, utilisant le commando' Sudo crontab -e ', ne fonctionnent pas, ils ont cessé de fonctionner il y a environ 1 mois et ont bien fonctionné pendant plus de 2 ans.

J'ai essayé de parler aux serveurs, et aucun d'entre eux n'a la moindre idée de ce qui pourrait ne pas être correct. BTW je ne suis pas un expert en serveur, je peux suivre un guide, mais c'est tout :)

J'ai essayé: redémarrer le service cron, "installer une nouvelle crontab", exécuter les scripts dans la crontab normale à l'aide de l'utilisateur root, redémarrer le serveur, supprimer tout le contenu du fichier, supprimer MAILTO.

Tous les scripts fonctionnent simplement en les exécutant manuellement.

c'est l'amende qui ne fonctionne pas:

MAILTO = ""

2 3 * * * "/usr/local/scripts/backup-mysql.sh"
25 3 * * * "/usr/local/scripts/backup-prestashop.sh"
1
Andersburn

Le plus utile devrait être d’obtenir des messages d’erreur.

2  3  * * *  { date; bash -v "/usr/local/scripts/backup-mysql.sh"; date; }  &>/tmp/cron-backup-mysql.log
25 3  * * *  { date; bash -v "/usr/local/scripts/backup-prestashop.sh"; date; } &>/tmp/cron-backup-prestashop.log

La sortie est enregistrée dans /tmp/cron-backup-mysql.log et /tmp/cron-backup-prestashop.log. bash -v affiche les lignes du script au fur et à mesure de leur lecture.

Vous pouvez vérifier le propriétaire du fichier pour vous assurer qu'il est exécuté en tant que root. Ensuite, lisez le fichier, vous avez l’heure de début et de fin pour vérifier si l’exécution est terminée et si la durée correspond à vos attentes.

Si le script s'exécute maintenant correctement, le problème était probablement l'invocation implicite du shell (retirez bash -v de crontab et ajoutez echo Shell = $Shell au script) ou l'autorisation d'exécution manquante sur le script (chmod +x). .

Si le script se bloque, bash -v vous aidera à trouver le bogue. Vous pouvez afficher plus de détails en remplaçant -v par -x, mais cela inondera la sortie avec chaque expression au fur et à mesure de leur évaluation.

1
user285259