Comment utiliser Cron sur Linux Unix

Qu'est-ce que cron ?


Cron est le nom du programme qui permet aux utilisateurs Linux/Unix d'exécuter automatiquement des commandes ou des scripts (groupes de commandes) à une heure ou à une date précise. Il est normalement utilisé pour les commandes de tâches administratives, telles que les sauvegardes, mais il peut être utilisé pour exécuter n'importe quoi. Comme défini dans les pages de manuel de cron; c'est un démon qui exécute des programmes planifiés.
Dans pratiquement toutes les distributions Linux la version Vixie Cron est utilisée, par la personne qui l'a développée, qui est Paul Vixie, l'un des grands gourous d'Unix, également créateur, entre autres systèmes, de BIND qui est l'un des serveurs DNS les plus populaires dans le monde.

Démarrer cron


Cron est un démon (service), ce qui signifie qu'il ne doit être démarré qu'une seule fois, généralement avec le même démarrage du système. Le service cron s'appelle crond. Dans la plupart des distributions, le service est installé automatiquement et est démarré à partir du démarrage du système, il peut être vérifié de plusieurs manières :
 1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) est en cours d'exécution… 
Si vous avez installé la commande de service :
 état de service
 crond (pid 507) est en cours d'exécution… 
il peut également être consulté via la commande ps :
 ps-ef | grep crond
si pour une raison quelconque, cron ne fonctionne pas, nous pouvons le démarrer avec :
 /etc/rc.d/init.d/crond start Démarrage de crond : [OK]
[color = rgb (0,0,0)] Si le service n'était pas configuré pour démarrer depuis le début, il suffirait de l'ajouter avec la commande chkconfig : [/ color]
 chkconfig --level 35 crond activé 
Avec cela, vous l'ajouteriez pour exécuter les niveaux 3 et 5, afin qu'il démarre au moment du démarrage du système.

Utiliser cron


Il existe au moins deux façons différentes d'utiliser cron :
Le premier se trouve dans le répertoire /etc, où vous trouverez très probablement les répertoires suivants :
  • cron.horaire
  • cron.daily
  • cron.hebdomadaire
  • cron.mensuel
Si un fichier de script est placé dans l'un de ces répertoires, le script s'exécutera toutes les heures, tous les jours, toutes les semaines ou tous les mois, selon le répertoire.
Pour que le script soit exécuté, il doit ressembler à ce qui suit :
 #! / bin / sh #script qui génère un cd de sauvegarde / usr / documents tar czf * backup cp backup / other_directory /
Nous devons corriger que la première ligne commence par # !, ce qui indique qu'il s'agit d'un script shell bash, les autres lignes sont les commandes que nous voulons que le script exécute. Ce script pourrait être nommé par exemple backup.sh et nous devons également modifier les autorisations correspondantes pour qu'il puisse être exécuté, par exemple :
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 20 juillet 09:30 backup.sh
Le « x » dans le groupe d'autorisations du propriétaire (-rwx) indique qu'il peut être exécuté.
Si nous laissons ce script dans cron.hourly, alors il sera exécuté toutes les heures avec une minute de chaque jour, plus tard j'expliquerai pourquoi.
La deuxième façon d'exécuter ou d'utiliser cron consiste à manipuler directement le fichier /etc/crontab. Sur l'installation par défaut de diverses distributions Linux, ce fichier ressemblera à ceci :
 cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Les quatre premières lignes sont des variables qui indiquent ce qui suit :
COQUILLEC'est le "shell" sous lequel le cron s'exécute. S'il n'est pas précisé, celui indiqué dans la ligne /etc/passwd correspondant à l'utilisateur qui exécute cron sera pris par défaut.
CHEMINContient ou indique le chemin d'accès aux répertoires dans lesquels cron recherchera la commande à exécuter. Ce chemin est différent du chemin global du système ou de l'utilisateur.
COURRIER ÀC'est à qui la sortie de la commande est envoyée (si elle a une sortie). Cron enverra un e-mail à quiconque est spécifié dans cette variable, c'est-à-dire qu'il doit être un utilisateur valide du système ou d'un autre système. S'il n'est pas spécifié, cron enverra le courrier à l'utilisateur qui possède la commande en cours d'exécution.
DOMICILEIl s'agit de la racine ou du répertoire principal de la commande cron, s'il n'est pas indiqué alors, la racine sera celle indiquée dans le fichier /etc/passwd correspondant à l'utilisateur qui exécute cron.
Les les commentaires sont indiqués par # au début de la ligne.
Après ce qui précède viennent les lignes qui exécutent les tâches correctement planifiées. Il n'y a pas de limites au nombre de tâches qu'il peut y avoir, une par ligne. Champs (Ils sont 7) qui forment ces lignes sont formées comme suit :
 Minute Heure DayOfMonth Mois DayOf Semaine Commande utilisateur
  • Campagne: La description
  • Minute: Il contrôle la minute de l'heure à laquelle la commande sera exécutée, cette valeur doit être comprise entre 0 et 59.
  • Temps: Il contrôle l'heure à laquelle la commande sera exécutée, il est spécifié au format 24 heures, les valeurs doivent être comprises entre 0 et 23, 0 étant minuit.
  • Jour du mois: Jour du mois au cours duquel vous souhaitez exécuter la commande. Par exemple, 20 serait indiqué, pour exécuter la commande le 20 du mois.
  • Mois: Mois au cours duquel la commande sera exécutée, il peut être indiqué numériquement (1-12), ou par le nom du mois en anglais, uniquement les trois premières lettres.
  • Jour de la semaine: Jour de la semaine où la commande sera exécutée, elle peut être numérique (0-7) ou par le nom du jour en anglais, uniquement les trois premières lettres. (0 et 7 = dimanche)
  • Utilisateur: Utilisateur qui exécute la commande.
  • Commander: Commande, script ou programme que vous souhaitez exécuter. Ce champ peut contenir plusieurs mots et espaces.
Un astérisque * en tant que valeur dans les cinq premiers champs, indiquera le début et la fin du champ, c'est-à-dire tout. Un * dans le champ des minutes indiquera toutes les minutes.
Pour mieux comprendre cela des 5 premiers champs et de l'astérisque, je vais mieux utiliser plusieurs exemples :
Exemple:
 Description 01 * * * * Fonctionne à 1 minute de chaque heure de chaque jour 158 * * * À 8 h 15 tous les jours 15 20 * * * A 20h15 de chaque jour 00 5 * * 0 À 5 heures du matin tous les dimanches * 5 * * dim Toutes les minutes à partir de 5h00 à 5h59 tous les dimanches 45 19 1 * * À 19h45 1er de chaque mois 01 * 20 7 * À 1 minute de chaque heure le 20 juillet 10 1 * 12 1 À 1 h 10 Tous les lundis de décembre 00 12 16 * Mer. A midi le 16 de chaque mois et c'est-à-dire mercredi 30 9 20 7 4 A 9h30 du 20 juillet et c'est jeudi 30 9 20 7 * À 9 h 30 à partir du 20 juillet quel que soit le jour de la semaine 20 * * * 6 Jusqu'à la 20e minute de chaque heure le samedi 20 * * 1 6 Jusqu'à la 20e minute de chaque heure le samedi de janvier 
Il est également possible de spécifier des listes dans les champs. Les listes peuvent être sous la forme 1,2,3,4 ou sous la forme 1-4 qui serait la même. Cron, de la même manière, supporte les augmentations dans les listes, qui sont indiquées comme suit :
 Valeur ou liste / incrément
Encore une fois, les listes et les incréments sont plus faciles à comprendre avec des exemples :
Exemple:
 Descriptif 59 11 * 1-3 1,2,3,4,5 A 11h59 Lundi au vendredi, janvier à mars 45 * 10-25 * 6-7 A 45 minutes de toutes heures de 10 à 25 de tous les mois et que le jour soit samedi ou dimanche 10,30,50 * * * 1,3,5 A 10, 30 et 50 minutes toutes les heures le lundi, mercredi et vendredi * / 15 10-14 * * * Toutes les quinze minutes à partir de 10h00 à 14h00 * 12 1-10 / 2 2,8 * Toutes les minutes de 12 heures, les jours 1,3,5,7 et 9 de février et août. (L'incrément dans le troisième champ est de 2 et commence à partir de 1) 0 * / 5 1-10,15,20-23 * 3 Toutes les 5 heures du jour 1 au 10, du jour 15 et du jour 20 au 23 de chaque mois et que le jour est mercredi 3/3 2/4 2 2 2 Toutes les 3 minutes à partir de la minute 3 (3,6,9, etc.) des heures 2,6,10, etc. (toutes les 4 heures à partir de l'heure 2) le 2 février et c'est mardi
Comme on peut le voir dans le dernier exemple, la tâche cron qui a été affectée à cette ligne avec ces données, ne serait exécutée que si les 5 champs (ET) sont remplis. Autrement dit, pour que la tâche s'exécute, elle doit être le mardi 2 février à 02h03. Il s'agit toujours d'un ET booléen qui ne renvoie vrai que si les 5 champs sont vrais dans la minute spécifique.
[color = rgb (0,0,0)] Le cas précédent précise alors que : [/ color]
Le programme cron est invoqué toutes les minutes et exécute les tâches que ses champs sont remplies dans cette minute précise.
Incluant le champ utilisateur et la commande, les lignes de crontab pourraient alors être les suivantes :
 0 22 * ​​​​* * root /usr/daily backup.sh 0 23 * * 5 root /usr/weekly backup.sh 0 8.20 * * * jcarrillo mail -s "système en cours d'exécution" [email protected]
Les deux premières lignes sont exécutées par l'utilisateur root et la première exécute à 22h00 tous les jours le script qui génère une sauvegarde quotidienne. Le second exécute à 23h tous les vendredis un script qui génère une sauvegarde hebdomadaire. La troisième ligne est exécutée par l'utilisateur sergio et elle serait exécutée à 8 heures du matin et à 8 heures du soir tous les jours et la commande consiste à envoyer un e-mail au compte [email protected] avec le sujet "système en fonctionnement", un moyen pour un administrateur de savoir qu'un système distant est actif aux heures spécifiées, mais s'il ne reçoit pas d'e-mail à ces heures, quelque chose ne va pas.
Être racine, il est alors possible, modifier directement crontab:
 vim / etc / crontab 
Celui-ci est directement modifié.

Exécution de Cron avec plusieurs utilisateurs, commande crontab


Linux est un système multi-utilisateurs et cron est l'une des applications qui prend en charge le travail avec plusieurs utilisateurs en même temps. Chaque utilisateur peut avoir son propre fichier crontab, en fait le /etc/crontab est supposé être le fichier crontab de l'utilisateur root, bien qu'il n'y ait aucun problème que d'autres utilisateurs soient inclus, et donc le sixième champ qui indique précisément qui est l'utilisateur. qui exécute la tâche et est requis dans :
 /etc/crontab

Mais lorsque les utilisateurs normaux (et même root) veulent générer leur propre fichier crontab, alors nous utiliserons le commande crontab.
Dans le répertoire /var/spool/cron (peut varier selon la distribution), un fichier cron est généré pour chaque utilisateur, bien que ce fichier soit du texte, il ne doit pas être modifié directement.
Il y a alors deux situations, générant directement le fichier crontab avec la commande :
 crontab -e
Avec lequel l'éditeur par défaut s'ouvrira (généralement vi) avec le fichier appelé crontab vide et où l'utilisateur entrera sa table des tâches et celle-ci sera automatiquement enregistrée sous /var/spool/cron/user.
L'autre cas est que l'utilisateur édite un fichier texte normal avec les entrées des tâches et par exemple le nomme 'my_cron', puis la commande $> crontab my_cron se chargera de l'établir comme fichier cron de l'utilisateur dans /var / spool / cron / user :
 vi my_cron # supprime les fichiers du dossier partagé 0 20 * * * rm -f / home / sergio / shared / * # exécute un script qui effectue une sauvegarde du dossier documents le premier jour de chaque mois 0 22 1 * * / home / sergio / mensuel support.sh # toutes les 5 heures du lun au ven, il s'assure que les permissions sont correctes chez moi 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq (le file)> ls my_cron> crontab my_cron (défini sur /var/spool/cron/user)
Résumant ce qui précède et envisageant d'autres options pour crontab:
 crontab file.cron (définira le fichier.cron comme crontab de l'utilisateur) crontab -e (ouvrira l'éditeur de préréglage où le fichier crontab peut être créé ou modifié) crontab -l (liste le crontab actuel de l'utilisateur, ses tâches cron) crontab -r (supprime la crontab actuelle de l'utilisateur)
Sur certaines distributions, lors de l'édition de crontabs d'utilisateurs réguliers, il est nécessaire de redémarrer le service afin que les fichiers crontab dans /var/spool/cron puissent être relus.
 redémarrage du service crond 
Pour mieux comprendre comment démarrer/arrêter/redémarrer les services, vous trouverez dans cet article plus d'informations.

Contrôler l'accès à cron


Cron vous permet de contrôler quels utilisateurs peuvent ou ne peuvent pas utiliser les services cron. Ceci est réalisé de manière très simple grâce aux fichiers suivants :
  • /etc/cron.allow
  • /etc/cron.deny
Pour empêcher un utilisateur d'utiliser cron ou plutôt la commande crontab, il suffit d'ajouter son nom d'utilisateur dans le fichier /etc/cron.deny, pour autoriser son utilisation alors ce serait d'ajouter son nom d'utilisateur dans /etc/cron.allow, si, pour une raison quelconque, vous souhaitez refuser l'utilisation de cron à tous les utilisateurs, vous pouvez alors écrire le mot ALL au début de cron.deny et cela suffirait.
 echo ALL >> / etc / cron.deny ou pour ajouter un autre utilisateur à cron.allow echo juan >> / etc / cron.allow
Si ni le fichier cron.allow ni le fichier cron.deny n'existent, en théorie l'utilisation de cron est alors sans restriction d'utilisateur. Ajouter des noms d'utilisateur dans cron.allow, sans créer de fichier cron.deny, aura le même effet que de le créer avec le mot ALL. Cela signifie qu'une fois que cron.allow a été créé avec un seul utilisateur, les autres utilisateurs qui souhaitent utiliser cron devront toujours être spécifiés dans ce fichier.
ConclusionNous avons parlé de son fonctionnement, j'espère que vous l'avez compris, certaines distributions comme Red Hat incluent une variante comme anacron qui peut pallier certaines déficiences de cron, néanmoins, à n'importe quel niveau du plus basique au plus avancé, cron est utilisé , il est conseillé de comprendre son fonctionnement . Si vous trouvez des questions ou avez une suggestion, n'hésitez pas à la placer dans les commentaires.Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave