Crontab ne fonctionnant jamais dans /etc/cron.d

32

Voici ce que j'ai fait sur Debian Jessie:

  • installer cron via apt-get install cron
  • mettre un backup_crontabfichier dans/etc/cron.d/

Cependant, la tâche n'est jamais en cours d'exécution.

Voici quelques sorties:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Y a-t-il quelque chose à faire pour activer un crontab particulier, ou pour activer le "service" cron en lui-même?

Jivan
la source
4
Que faire s'il fonctionne et échoue avec une erreur que vous ne voyez pas parce que vous redirigez toutes les sorties vers / dev / null? :)
tink
@tink est-il possible d'ajouter la sortie à la fin d'un fichier à la place?
Jivan
2
c'est sûr; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
tink
@Jivan, juste une petite note: ls /etc/cron.déquivaut à cd /etc/cron.d && lsen termes de sortie. La seule différence est que le répertoire de travail ne changera pas.
Drew Chapin

Réponses:

49

Les fichiers /etc/cron.ddoivent également répertorier l' utilisateur sous lequel le travail doit être exécuté.

c'est à dire

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

Vous devez également vous assurer que les autorisations et le propriétaire: groupe sont définis correctement ( -rw-r--r--et appartiennent à root:root)

Stephen Harris
la source
16
crontab -lrapports sur les entrées cron dans /var/spool/cron/crontabs/- c'est- à -dire les crontabs par utilisateur . /etc/cron.dles fichiers sont des crontabs système et ne sont pas signalés par crontab -l.
Stephen Harris
5
En fait, j'ai mentionné que cela ne fonctionnait pas, mais je viens de réaliser que c'est après avoir ajouté rootle fichier - je crontab -lne l'ai tout simplement pas mentionné, car vous avez expliqué pourquoi - merci pour votre aide
Jivan
9
il semble que le nom de fichier ait également un rôle. Dans mon cas, j'avais ajouté à etc/cron.dun fichier avec un point au milieu du nom et le travail n'a jamais été exécuté jusqu'à ce que je le renomme
pic
20
même problème ici, les tirets "-" dans le nom de fichier, en les remplaçant par des traits de soulignement "_" ont résolu le problème, les travaux ont été exécutés immédiatement.
Rob
1
J'ai aussi eu un tiret ... qu'est-ce que ... pourquoi?! Quoi qu'il en soit, merci @Rob
Nikolay Dimitrov
8

Une autre chose que j'ai observée est que le fichier /etc/cron.dne peut pas avoir d'extension. Dans mon cas particulier, j'avais un lien symbolique:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

La restriction du nom de fichier est documentée sur la page de manuel de la partie d'exécution: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html , on peut passer une option --regex pour remplacer le format de fichier.

Le comportement cron par défaut est cependant resté sans extensions, voir les commentaires sous: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022

rodrigo-silveira
la source
Mec, tu m'as sauvé la journée!
elboletaire
2
C'est correct sur Ubuntu (peut-être sur toutes les distributions dérivées de Debian). Sur Amazon Linux (et peut-être sur toutes les distributions dérivées de Redhat), vous pouvez avoir un point dans le nom du fichier. Merci Unix.SE.
Loi29
Je viens de vérifier un Debian pur et les points ne fonctionnent pas non plus. Les tirets fonctionnent (contrairement à ce que dit un commentaire ci-dessus).
Loi29
4

Je pense que vous manquez probablement une ligne vierge nécessaire à la fin de votre fichier cron. J'ai eu le même problème, mais après avoir vérifié tout ce qui est répertorié ici (autorisations utilisateur, nom de fichier, version cron, etc.), je me suis rendu compte que je n'avais pas de saut de ligne après la dernière entrée de mon /etc/cron.d/own_cronet que le fichier entier était ignoré.

slac1024
la source
2

Si vous êtes le seul utilisateur sur cet ordinateur, vous pouvez utiliser uniquement crontab -e. Vous serez invité à sélectionner un éditeur la première fois que vous exécuterez la commande. Ensuite, vous pouvez y ajouter ceci:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Si vous passez à un compte d'utilisateur normal, vous devrez utiliser sudo crontab -epour configurer les scripts que vous souhaitez que l'exécution soit planifiée root.

crontab -laffiche uniquement la crontab actuelle, une fois que vous en avez configuré une à l'aide de crontab -e. Si vous avez un fichier cron dans /etc/cron.d/, il ne sera pas affiché avec crontab -l.

Vous devrez également vérifier que votre script est exécutable avec: chmod +x /backup.sh.

clk
la source
1
merci - dans ce cas, le crontab est placé dans le contexte d'un Dockerfiledonc je ne peux pas vraiment le faire crontab -e- mais c'est quand même une information utile
Jivan
2

Pour les distributions Cron de * bian (comme Raspbian), vous devez activer le -lparamètre du démon Cron. Il est conseillé de le faire en utilisant le /etc/default/cronfichier de configuration, en activant le EXTRA_OPTS.

toucher du bois
la source
Cela a été rétrogradé, mais c'est correct dans certains cas, bien que cela ne soit pas expliqué. Sur les distributions basées sur Debian, l' -loption du démon cron autorise un ensemble étendu de noms de fichiers dans le /etc/cron.drépertoire, donc si le fichier est ignoré en silence car il contient un point, alors "ajouter -l" ou "supprimer le point" corrigera le problème.
Loi29
1

Vérifiez votre version de cron.

Il semble que si vous utilisez le crond de Dillon, vous n'avez pas besoin de l'utilisateur dans une /etc/cron.dentrée.

J'ai compris cela après avoir presque retiré mes cheveux restants.

J'ai une poignée d'entrées qui ont été déposées /etc/cron.dpar diverses installations. Après une enquête, j'ai découvert que l'un d'entre eux fonctionnait. Il n'avait pas l'utilisateur. J'ai donc sorti l'utilisateur des autres. Et ils ont commencé à travailler.

James Nelson
la source