Quelle est la différence entre cron.d (comme dans /etc/cron.d/) et crontab?

18

Quelle est la principale différence entre le répertoire cron.d (comme dans /etc/cron.d/) et crontab?

Autant que je sache, on pourrait créer un fichier comme /etc/cron.d/my_non_crontab_cronjobset y mettre tout ce que l'on veut, tout comme on le mettrait crontabvia crontab -e.

Quelle est donc la principale différence entre les deux?

Arcticooling
la source
emplacement dans le système et format.
Rui F Ribeiro
Format? De 2 exemples, j'ai vu qu'il a également la syntaxe de 5 unités de temps, ou je le confond avec crontab.
Arcticooling

Réponses:

24

Les différences sont documentées en détail dans la cron(8)page de manuel de Debian. La principale différence est qu'il /etc/cron.dest rempli de fichiers séparés, alors qu'il crontabgère un fichier par utilisateur; il est ainsi plus facile de gérer le contenu de l' /etc/cron.dutilisation de scripts (pour une installation et des mises à jour automatisées), et plus facile à gérer à l' crontabaide d'un éditeur (pour les utilisateurs finaux vraiment).

D'autres différences importantes sont que toutes les distributions ne prennent pas en charge /etc/cron.det que les fichiers /etc/cron.ddoivent répondre à un certain nombre d'exigences (au-delà d'être des tâches cron valides): elles doivent appartenir à root et doivent respecter run-partsles conventions de dénomination ( pas de points , seulement lettres, chiffres, traits de soulignement et tirets).

Si vous envisagez d' utiliser /etc/cron.d, il est généralement utile d' envisager l' un des /etc/cron.hourly, /etc/cron.daily, /etc/cron.weeklyou à la /etc/cron.monthlyplace.

Stephen Kitt
la source
1
Et pour un exemple concret, les éléments cron.dsont généralement ajoutés via l'installation du package, tandis que les différents crontabfichiers sont remplis de choses créées par un utilisateur correspondant. IE, le paquet certbotou letsencryptmet une entrée dedans cron.d- avant que le paquet ne soit disponible, le sysadmin (root) ajouterait une entrée dans l'utilisateur root crontabpointant vers un script shell / etc. pour maintenir les certificats à jour.
ivanivan
Merci Stephen! Pourquoi recommandez-vous d'utiliser des répertoires cron horaires / hebdomadaires / mensuels? Et BTW, pourquoi la page de manuel s'appelle-t-elle cron (8), à quoi sert le 8 (la page de manuel de crontab nommée crontab (1)).
Arcticooling
1
@Arcticooling, voir cette question pour une explication du(8)
user4556274
Les répertoires horaires, etc. facilitent l'ajout de tâches (pas besoin de comprendre la syntaxe exacte) et, plus important encore, permettent au système de varier le temps d'exécution réel en fonction des circonstances; c'est particulièrement utile sur les systèmes qui ne sont pas toujours allumés, avec anacron.
Stephen Kitt
1
L'inconvénient des hourly|daily|weekly|monthlyrépertoires est que (AFAICT), ils s'exécutent toujours en tant que root et ne prennent pas directement en charge l'exécution avec des privilèges moindres.
ilkkachu
5

Je dirais que la principale différence est la plus évidente: /etc/crontabet /etc/cron.dne sont pas modifiables par les utilisateurs réguliers, contrairement aux crontabs par utilisateur dans la mesure /var/spool/cronoù l' crontaboutil est modifié . (Sous réserve de cron.allowet cron.deny, bien sûr.) Bien sûr, sur un système dont vous êtes l'administrateur, vous pouvez utiliser l'un ou l'autre. Sur un système partagé, les utilisateurs réguliers ne peuvent en utiliser qu'un.

Le champ supplémentaire dans les fichiers à l'échelle du système, le nom d'utilisateur sous lequel le travail s'exécute est lié à cela.

ilkkachu
la source