8
votes

Job de Linux Debian Crontab non exécuté

J'ai un script Bash foo.sh situé dans le répertoire /etc/cron.daily , chmeded 700, appartenant à la racine, la liste de crontab pour l'utilisateur racine est inchangé (crontab -l) de l'installation de base de Debian. J'ai dirigé Cronjob d'une autre manière que Crontab -L et / ou Crontab -e (par exemple, je n'ai pas redémarré du démon cron avec /etc/init.d/cron comme indiqué dans l'affaire de Debian spécifique). Malgré un fichier de travail de test fonctionne dans des conditions similaires. Le script est débogué et peut être exécuté comme une tâche autonome sans les erreurs de retour. J'ai également vérifié des journaux (/ var / journal / syslog) et rien ne va pas là-bas.

mais : ce travail particulier n'est pas exécuté du tout.


0 commentaires

3 Réponses :


14
votes

oups. Devinez que j'ai trouvé le "pourquoi" ou du moins, le "comment":

seulement renommer le nom de fichier sans ".sh" extension a résolu ce problème.

Je pensais que c'était un bug de Debian, mais ce n'est pas le cas, comme décrit dans les autres réponses ci-dessous.

solution: renommez votre script en supprimant tous les . ou + de caractères de son nom


3 commentaires

Il est spécifique à Debian. Ce n'est pas un bogue, en ce qui concerne les préoccupations.


@ GMS8994: THX, mais je n'ai trouvé aucun endroit sur ce point sur les noms de fichiers de travail. Je l'ai trouvé exprès, faire des tests dichotomiaux.


J'ai trouvé ça de la même manière; Voir Ma question Pour plus d'informations.



8
votes

Les scripts /etc/cron.daily sont exécutés par des pièces d'exécution (voir Man 8 Run-Pièces).

Voilà avec un snip de la manche:

Si ni l'option --lsbsysinit ni L'option --regex est donnée alors le Les noms doivent être entièrement de la tige et des lettres minuscules, chiffres, des traits de soulignement et des traits d'union.

de / etc / crontab Vous pouvez voir que les travaux de cron quotidiens sont gérés avec: xxx

Debian n'utilise pas Anacron et il n'y a pas non - -Lsbsysinit option spécifiée pour les pièces d'exécution (dans ce cas "." Sera accepté dans le nom de fichier de script cron selon les espaces de noms hiérarchiques et réservés du LSB)

de toute façon, pour vous assurer que Cron dirigera votre script Peut toujours exécuter des pièces d'exécution et vérifier que votre script est répertorié dans la sortie Pièces d'exécution: xxx

ou xxx p > J'espère que mon commentaire vous aide à comprendre quel était le vrai problème.


4 commentaires

Oui, cela m'aide à comprendre davantage les arrière-plans de cronjob. Je n'étais pas au courant de ces points. thx + 1 pt.


Superbe réponse - Vous venez de me sauver un peu de temps de débogage.


Même si vous avez utilisé - lsbsysinit , les pièces exécutées n'accepteraient toujours pas foo.sh . Cela accepterait foo.-sh cependant. Il doit correspondre à cette regex: ^ _? ([A-Z0-9 _.] + -) + [A-Z0-9] + $


Puis-je tester mon crontab?



0
votes

Toutes les réponses données précédemment sont bonnes et acceptables pour la question. Cependant, je pense que je devrais ajouter mon point simplement pour préciser, que Debian Linux OS ne prend pas en charge les noms de fichiers du travail cron qui incluent le . ou + . Voir le section pertinente dans le < Un href = "http://www.debian.org/doc/debian-policy/" rel = "nofollow"> Manuel de stratégie debian .

C'est donc juste pour éviter toute confusion que ce n'est pas un bug. C'est comme ça que Debian fonctionne.


1 commentaires

Bonjour Slugster, merci pour l'édition d'effort. Cela ne compte pas pour moi comment cela s'appelle «période» ou «point» ou rien du tout. Pour moi, cela signifie la même chose. Maintenant, il est clair juste en lisant le signe.