web-dev-qa-db-fra.com

Dois-je modifier / etc / crontab ou exécuter crontab -e en tant que root?

Je mets en place des tâches de maintenance système régulières qui doivent s'exécuter en tant que root. Je prévois d'utiliser la saveur de cron fournie avec Ubuntu 14.04 LTS par défaut.

Je vois l'administrateur précédent (qui a depuis quitté l'entreprise) éditer directement/etc/crontab. Cependant, je comprends qu'une autre approche possible serait d'utiliser crontab -e en tant que root. Y a-t-il des arguments convaincants pour utiliser l'un ou l'autre, ou est-ce une préférence?

43
marcv81

Il peut être utile de noter que les travaux dans une crontab personnelle (crontab -e) sont toujours exécutés en tant que propriétaire, où /etc/crontab contient un champ supplémentaire obligatoire <user> permettant un admin pour configurer le travail pour qu'il s'exécute en tant qu'utilisateur non root.

La modification de la crontab du système ou la configuration d'une crontab personnelle pour root sont probablement un peu plus portables, non spécifiques à certaines distributions Linux et sans doute plus pratiques pour une personne à maintenir, avec tous les travaux dans un seul fichier mais:

Personnellement, je préfère un troisième option: pour chaque tâche planifiée, soit

  • un fichier dans /etc/cron.d/ avec un extrait cron
  • un exécutable (script) dans le répertoire /etc/cron.[hourly |daily |weekly |monthly] approprié.

C'est plus facile à scripter (vous pouvez simplement créer/écraser/supprimer de tels fichiers et vous n'avez pas à vous occuper du contenu d'un seul fichier crontab) et cela fonctionne bien avec les outils de gestion de configuration et c'est ce que les gestionnaires de packages sont déjà faire de toute façon.

Les travaux/scripts dans /etc/cron.[hourly |daily |weekly |monthly] sont toujours exécutés en tant que root, où les extraits cron dans /etc/cron.d/ permettent à la fois de définir un calendrier personnalisé et de s'exécuter en tant qu'utilisateur différent avec le même _ <user> champ trouvé dans /etc/crontab.

64
HBruijn

Du mieux que je me souvienne, crontab -e a l'avantage supplémentaire de vérifier la syntaxe crontab avant de l'installer, et d'errer et de restaurer la précédente si vous faites une erreur. De cette façon, tout ce qui fonctionnait auparavant ne s'arrêtera pas soudainement si vous vous trompez de syntaxe. Je pense que la meilleure pratique consiste à utiliser les utilitaires, comme exécuter visudo plutôt que de modifier /etc/sudoers directement.

15
Gargravarr

C'est vraiment une question de style, il y a une raison pour laquelle plusieurs méthodes sont proposées par l'OS. Soyez juste cohérent et ne mélangez pas si vous ne voulez pas confondre quelqu'un d'autre (ou vous-même après un certain temps de ne pas traiter avec le système) - s'il est difficile de voir quelles tâches sont réellement planifiées sur l'ensemble de l'hôte, cela a tendance pour finir en mauvaises surprises.

2
rackandboneman

Afin d'être sûr d'ajouter un travail cron qui nécessite des droits d'utilisateur spécifiques, j'utilise personnellement la commande suivante:

 # crontab -u <user> -e

Vous pouvez également ajouter Sudo.

Comme l'a indiqué @rackandboneman, il n'est pas nécessaire de jouer avec les fichiers /etc/cron.d/. Si le problème concerne les tâches cron de l'utilisateur, utilisez les fonctionnalités de la commande crontab.

2
aesnak