Quelle est la bonne façon de modifier un fichier crontab?


52

J'essaie d'automatiser l'actualisation des awstats pour mon serveur Web et je comprends que je dois utiliser cron pour le configurer. Donc, chaque utilisateur a un fichier crontab?

Je suivais les instructions ici community / AWStats

Et il est dit d'aller au fichier à: /etc/crontab

Ce fichier contient déjà des informations. Est-ce le crontabfichier principal ou quelque chose? J'ai vu des instructions en ligne pour utiliser le fichier qui apparaît avec crontab -e.

Quel est le fichier approprié à utiliser et le meilleur moyen de le faire?

Si je planifie une tâche en tant qu'utilisateur non root, cette tâche sera-t-elle exécutée d'elle-même selon l'intervalle de temps spécifié, sans aucun problème?

Devrai-je redémarrer le serveur après avoir enregistré le travail cron dans le crontabfichier avant de commencer à fonctionner?

Réponses:


50

Quel est le fichier approprié à utiliser et le meilleur moyen de le faire?

crontab -e est le meilleur moyen de le faire - cela vous permettra d’éditer facilement les crontabs par utilisateur.

Si je planifie une tâche en tant qu'utilisateur non root, cette tâche sera-t-elle exécutée d'elle-même selon l'intervalle de temps spécifié, sans aucun problème?

Oui, et il fonctionnera avec les privilèges de ce compte utilisateur.

En principe, il est préférable d'exécuter des tâches planifiées avec les privilèges les plus bas que vous puissiez obtenir. Par conséquent, si ce que vous faites ne nécessite pas de root, n'utilisez pas root. Si vous n'avez même pas besoin d'accéder aux fichiers et aux dossiers de votre compte, vous pouvez créer un nouvel utilisateur et utiliser ce compte uniquement pour cette tâche. D'autre part , si votre tâche ne nécessite racine, crontab de l' utilisation racine ( su/ sudo suà la racine puis utilisez crontab -e).

Devrai-je redémarrer le serveur après avoir enregistré le travail cron dans le fichier crontab avant de commencer à fonctionner?

Non, ça va commencer à fonctionner tout de suite (enfin, la prochaine heure programmée possible).

Pourquoi ne pas éditer le fichier directement? Où est-il situé?

Les fichiers crontab de l'utilisateur sont situés dans /var/spool/cron/crontabs, mais leurs autorisations sont définies de manière à ce qu'ils ne puissent pas être parcourus sans l'autorisation du superutilisateur (mais une fois ouvert, le processus cron supprime les privilèges lui permettant d'accéder au fichier).

Le système n'est pas conçu pour que les utilisateurs finaux puissent éditer ces fichiers directement. En effet, le haut du fichier est précédé d'un DO NOT EDIT THIS FILEavertissement sévère à cet effet. Au lieu de cela, le fichier est conçu pour être édité via la crontab -econfiguration d’un miroir temporaire du fichier /tmp, sans avertissement sévère, après quoi il vérifie et installe le fichier crontab permanent. Tout cela peut être fait sans la permission du superutilisateur.

Si vous avez édité directement le fichier crontab, je ne sais pas quel en serait le résultat. C'est peut-être que cela ne prendrait tout simplement pas effet avant le prochain redémarrage et toute erreur pourrait être difficile à déboguer.


5
crontab -evous permet de modifier votre crontab utilisateur sans sudo. Les crontabs de l'utilisateur sont /var/spool/cron/crontabsun répertoire auquel on ne peut pas accéder sans la permission du superutilisateur (mais de telle sorte qu'une fois que cron a supprimé ses privilèges, il est toujours capable de le lire). Même si vous utilisez sudo pour essayer d’éditer directement le fichier, vous voyez un gros avertissement en haut, «NE MODIFIEZ PAS CE FICHIER» - le fichier est conçu pour être édité à l’aide de la crontabcommande qui utilise une copie temporaire /tmppuis est installée. après avoir économisé.
thomasrutter

25

Chaque utilisateur a le sien crontab.

Pour le voir, tapez simplement

crontab -l

et, oui, vous avez bien vu, quand vous voulez ajouter un crontabsimplement faire

crontab -e

pour la première fois, on vous posera des questions sur l'éditeur à utiliser crontab. Comme vous êtes un débutant comme vous le dites, je vous recommande d’utiliser nano, c’est l’éditeur le plus simple à utiliser.

La crontab elle-même fonctionne comme ça

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

Donc, par exemple, pour déclencher un travail toutes les 15 minutes seulement le lundi, vous le faites comme

*/15 * * * mon /home/me/yourscript.sh

et OUI il est très important que vous mettiez votre travail cron dans la crontab de l'utilisateur qui dispose des droits suffisants pour l'exécuter.

Donc, si votre script doit être root ou un utilisateur spécial, assurez-vous de le soumettre à cet utilisateur et ajoutez-y le travail cron.

Aussi très important!

cronjob est bête! Oui je l'ai dit. Assurez-vous toujours de saisir le PATH complet dans le fichier que application/command/scriptvous utilisez, car crontab ne fonctionnera pas avec .bashrcou similaire. Vous devez toujours vous assurer que vous dites à cron où il peut trouver les fichiers et les répertoires.

Pour répondre au reste de vos questions:

Bien sûr, il fonctionnera tout seul, c'est pour cela qu'il est fait. Mais vous devez vérifier que cronjob le fait vraiment, ou s'il manque quelque chose. Par exemple, connectez-vous à un fichier journal pour voir si cela fonctionne vraiment.

Et NON, un redémarrage n'est pas nécessaire. Un redémarrage avec Linux n'est normalement nécessaire que si vous installez un nouveau noyau. Pour l'utiliser, vous devez redémarrer. Presque tout le reste peut être fait sans redémarrer sous Linux. Bien sûr, il existe des exceptions, mais en général, cette affirmation est correcte.


pour vérifier votre format de temps consultez ce site crontab.guru
Astm
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.