|
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.
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!"
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: