Cron & crontab, expliqué

Lucaine publié il y a un moment excellent tutoriel sur cron et crontab que je pense qu'il vaut la peine d'être partagé. Cron est une sorte d'équivalent des tâches planifiées dans Windows, seulement qu'il est géré depuis le terminal. Ceux qui préfèrent une interface visuelle pour atteindre le même objectif peuvent le voir un autre élément.

Qu'est-ce que cron?

Le nom cron vient du grec chronos qui signifie «temps». Dans le système d'exploitation Unix, cron est un gestionnaire de processus d'arrière-plan (démon) régulier qui exécute des processus ou des scripts à intervalles réguliers (par exemple, chaque minute, jour, semaine ou mois). Les processus qui doivent être exécutés et l'heure à laquelle ils doivent être exécutés sont spécifiés dans le fichier crontab.

Comment ça marche

Le démon cron commence à partir de /etc/rc.d/ o / Etc / init.d selon la distribution. Cron s'exécute en arrière-plan, vérifie la table des tâches crontab toutes les minutes / etc / crontab ou une / var / spool / cron à la recherche de tâches à accomplir. En tant qu'utilisateur, nous pouvons ajouter des commandes ou des scripts avec des tâches à cron pour automatiser certains processus. Ceci est utile par exemple pour automatiser la mise à jour d'un système ou d'un bon système de sauvegarde.

Article connexe:
Tutoriel: Installer les packages .tar.gz et .tar.bz2

Qu'est-ce que Crontab?

Crontab est un simple fichier texte qui stocke une liste de commandes à exécuter à un moment spécifié par l'utilisateur. Crontab vérifiera la date et l'heure auxquelles le script ou la commande doit être exécuté, les autorisations d'exécution et il le fera en arrière-plan. Chaque utilisateur peut avoir son propre fichier crontab, en fait le / etc / crontab il est supposé être le fichier crontab de l'utilisateur root, lorsque les utilisateurs normaux (et même root) veulent générer leur propre fichier crontab, nous utiliserons la commande crontab.

Crontab est le moyen le plus simple de gérer les tâches cron sur des systèmes multi-utilisateurs, que ce soit en tant qu'utilisateur système simple ou utilisateur root.

Utilisation de crontab

Nous commençons par un exemple simple.

Nous allons automatiser la mise à jour d'un système, pour éliminer l'ennuyeux du "je dois toujours mettre à jour et je n'aime pas ça!"

comment
Article connexe:
Commandes pour connaître le système (identifier le matériel et certaines configurations logicielles)

Tout d'abord, nous allons faire un script. Ce script sera appelé par cron et contiendra toutes les instructions que l'on souhaite qu'il fasse, il faut donc le tester dans plusieurs cas et de plusieurs manières avant de l'inclure dans cron, un simple script de mise à jour comme celui-ci:

#! / bin / bash #exemple de mise à jour de script #choisissez votre distribution # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Supprimez le # de votre ligne de distribution. Dans le cas où il s'agit d'Ubuntu / Debian, cela commence par apt-get.

Nous sauvegardons le script sous le nom update.sh (par exemple, le répertoire des scripts chez vous). Nous modifions les autorisations d'exécution dudit script avec:

chmod a + x ~ / scripts / update.sh

Nous exécutons le script plusieurs fois pour vérifier que tout se passe bien, nous modifions ce qui est nécessaire (il ne doit pas contenir d'erreurs, sinon cron ne fera que répéter une erreur encore et encore). Maintenant, pour ajouter la tâche à notre crontab.

Ajouter des tâches à crontab

Nous exécutons l'édition de la crontab avec crontab -e, dans certaines distributions (comme Ubuntu) cela nous donne la possibilité de choisir l'éditeur de texte que nous voulons, le reste nous reste avec vi. Le fichier crontab ressemblera à ceci.

Commande utilisateur # mh dom mon dow

où:

  • m correspond à la minute où le script sera exécuté, la valeur varie de 0 à 59
  • h l'heure exacte, le format 24 heures est géré, les valeurs vont de 0 à 23, 0 étant 12:00 minuit.
  • Dim fait référence au jour du mois, par exemple, vous pouvez spécifier 15 si vous souhaitez exécuter tous les 15 jours
  • fenêtre signifie le jour de la semaine, il peut être numérique (0 à 7, où 0 et 7 sont dimanche) ou les 3 premières lettres du jour en anglais: lun, mar, mer, jeu, ven, sam, dim.
  • utilisateur définit l'utilisateur qui exécutera la commande, il peut s'agir d'un utilisateur root ou d'un autre utilisateur tant qu'il dispose des autorisations nécessaires pour exécuter le script.
  • commander fait référence à la commande ou au chemin absolu du script à exécuter, exemple: /home/usuario/scripts/update.sh, s'il appelle un script, il doit être exécutable

Pour être clair, quelques exemples de tâches cron expliquées:

15 10 * * * utilisateur /home/user/scripts/update.sh

Il exécutera le script update.sh à 10h15 tous les jours

15 22 * * * utilisateur /home/user/scripts/update.sh

Il exécutera le script update.sh à 10h15 tous les jours

00 10 * * 0 root apt-get -y update Utilisateur root

Il exécutera une mise à jour tous les dimanches à 10h00

45 10 * * sun root apt-get -y mise à jour

L'utilisateur root exécutera une mise à jour tous les dimanches (dim) à 10h45

30 7 20 11 * utilisateur /home/usuario/scripts/updata.sh

Le 20 novembre à 7h30, l'utilisateur exécutera le script

30 7 11 11 utilisateur sun /home/usuario/scripts/pastel_con_velitas.sh

Le 11 novembre à 7h30 et c'est dimanche, l'utilisateur fêtera son administrateur système (c'est-à-dire moi)

01 * * * * utilisateur /home/user/scripts/molestorecordatorio.sh

Un rappel ennuyeux chaque minute de chaque heure chaque jour (NON recommandé).

Ils peuvent encore être manipulés gammes spéciales:

30 17 * * 1,2,3,4,5

A 5h30 l'après-midi tous les jours du lundi au vendredi.

00 12 1,15,28 **

A 12h les 28er, XNUMX et XNUMX de chaque mois (idéal pour la paie)

Si cela prête à confusion, crontab gère chaînes spéciales pour définir ces plages.

@reboot Exécuter une fois, au démarrage
@yearly ne s'exécute qu'une fois par an: 0 0 1 1 *
@annuellement identique à @yearly
@monthly s'exécute une fois par mois, le premier jour: 0 0 1 * *
@weekly Hebdomadaire la première minute de la première heure de la semaine. 0 0 * * 0 ″.
@ tous les jours, à 12h00. 0 0 * * *
@midnight comme @daily
@hourly à la première minute de chaque heure: 0 * * * *

Son utilisation est très simple.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Enfin et surtout:

Gestion des tâches Cron

fichier crontab

Remplacez le fichier crontab existant par un fichier défini par l'utilisateur

crontab -e

Modifiez le fichier crontab de l'utilisateur, chaque nouvelle ligne sera une nouvelle tâche crontab.

crontab -l

Lister toutes les tâches crontab de l'utilisateur

crontab -d

Supprimer le crontab de l'utilisateur

crontab -c rép

Définit le répertoire crontab de l'utilisateur (il doit avoir les autorisations d'écriture et d'exécution de l'utilisateur)

crontab -u utilisateur

préfixe pour gérer le crontab d'un autre utilisateur, exemples:

$ sudo crontab -l -u racine $ sudo crontab -e utilisateur2 #crontab -d -u utilisateur

Cet outil, comme beaucoup d'autres, peut être vu plus en profondeur et plus en détail dans:

Merci Lucain!