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.
  • dom 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!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Image de balise Alvaro Ortiz dit

    Ugh ... un peu déroutant.

  2.   tonique dit

    * / 30 est manquant (dans le champ des minutes) qui s'exécute toutes les 30 minutes ...

    1.    euh3nda dit

      Juste cela, j'allais commenter jusqu'à ce que je décide de revoir les commentaires 😀
      Ce modificateur est une information très importante et quelque chose de très utile.

      1.    Kika dit

        Bonjour!
        En ce moment, je teste une configuration toutes les 45 minutes.

        * / 45 * * * *, et l'instruction est exécutée à 45 minutes de chaque heure ET toutes les heures. C'est-à-dire:

        Il s'exécute à 3 h 45, puis 4 h 00, 4 h 45, puis 5 h 00, 5 h 45, 6 h 00, 6 h 45, etc.

        Quelque chose ne va pas? Que puis-je faire pour que ce soit seulement toutes les 45 minutes, ou au moins une fois toutes les 45 minutes.

    2.    Kika dit

      Bonjour!
      En ce moment, je teste une configuration toutes les 45 minutes.

      * / 45 * * * *, et l'instruction est exécutée à 45 minutes de chaque heure ET toutes les heures. C'est-à-dire:

      Il s'exécute à 3 h 45, puis 4 h 00, 4 h 45, puis 5 h 00, 5 h 45, 6 h 00, 6 h 45, etc.

      Quelque chose ne va pas? Que puis-je faire pour que ce soit seulement toutes les 45 minutes, ou au moins une fois toutes les 45 minutes.

  3.   Slack dit

    Bonjour super utile les informations pour clarifier le fonctionnement de cron.
    Octets

  4.   Slack dit

    pour *

  5.   Chasseur dit

    Excellent, merci d'avoir clarifié le fonctionnement de cron .. mettons un petit coup de main

  6.   Jacob dit

    Cette ligne telle que je la comprends sera exécutée à 10h15, corrigez-moi si je me trompe
    Eh bien, il est dit 10h15
    15 22 * * * utilisateur /home/user/scripts/update.sh

  7.   Agustin dit

    Salut! très bonne info.
    Pour exécuter un script toutes les demi-heures, la ligne qui doit être ajoutée à CronTab serait: "30 * * * * root Scrip.sh" Correct? Merci beaucoup!

  8.   utilisons Linux dit

    Non. Si je me souviens bien, pour cela, vous devez mettre / 30 * * * * root Scrip.sh.
    Autrement dit, ajoutez le / avant 30.
    À votre santé! Paul.

  9.   Jonathan dit

    Bonjour j'ai aimé ton post, il est très complet mais je voulais te demander quelque chose.
    J'ai des problèmes avec cette commande et une comme "at".

    Je veux exécuter un script à un certain moment et mettre

    à -f /home/mi_user/Desk/script.sh exemple 18:08

    et le script n'est pas exécuté à l'écran, c'est-à-dire dans le terminal, est-il exécuté en arrière-plan?

    Et avec cron la même chose m'arrive, j'édite le fichier crontab avec "crontab -e"

    à la fin j'ajoute cette ligne:

    46 19 mon_utilisateur /home/mi_user/Desk/script.sh

    et il ne fait rien, il n'affiche pas le script.

    Toute suggestion? Merci beaucoup et excusez-vous pour tout inconvénient

    1.    utilisons Linux dit

      Pour que le terminal apparaisse, vous devrez peut-être exécuter le terminal et transmettre le script en tant que paramètre.

      Par exemple:

      lxterminal -e "mon_utilisateur /home/mi_user/Desktop/script.sh"

      Le paramètre à utiliser peut varier en fonction de l'émulateur de terminal que vous utilisez.

      J'espère que ça marche.

      Étreinte! Paul.

  10.   patrécas dit

    La contribution est appréciée.

    10 points !!

    salut2 !!

  11.   Rodolfo dit

    Merci beaucoup, cela m'a beaucoup aidé à clarifier certaines choses, merci total, pour plus de détails ou de questions je vais aller à la MAN PAGE, les salutations réitérées.

  12.   Jahir dit

    homme merci beaucoup, j'ai lu et testé les exemples. merci beaucoup ... c'est très compréhensible. À votre santé

  13.   Géovanni dit

    J'ai utilisé ubuntu Server 12.04.2 LTS, et la version de crontab que j'ai, pour supprimer la liste des travaux de l'utilisateur est utilisée, crontab -r (et -l, comme le dit ce manuel). Bien sûr, c'est par question de versions.

    D'un autre côté, une fois, j'ai exécuté uniquement crontab et ce genre de fichier m'a permis de créer mon propre fichier d'exécution, mais ce n'était pas celui qui était en cours d'exécution. Celui qui s'exécute est celui dans / etc / crontab. peut-être que quelqu'un utilisera le commentaire.

    PS (j'ai cherché avec Locate and whereis crontab mais il n'a renvoyé que l'adresse susmentionnée et un autre fichier crypté, donc si celui qui a été exécuté était celui de / etc / crontab, mais lors de l'exécution de la commande crontab -e, le mien est apparu avec tous les travaux que j'avais définis) où ce fichier était-il stocké? ???? Cordialement. Je me connecte toujours avec root.

  14.   Sebastian dit

    Excellent, très utile !!!

  15.   mmm dit

    Bonjour, j'aimerais faire ça ………… «15 10 * * * root ifdown eth0»

    c'est-à-dire qu'à un certain moment la carte réseau s'éteint ………… eh bien, je l'ai mise dans le crontab et ça n'a pas fonctionné …… .. quoi de neuf?

    Saludos y gracias

  16.   Miguel dit

    Vous avez manqué de définir "mon" après le titre "Ajouter des tâches à crontab"

    L'article est toujours sympa, cron est extrêmement utile.

  17.   Oscar dit

    À quel point ce bon message était-il cool, demandez-moi
    Si je veux garder une trace des enregistrements laissés par l'exécution des tâches, où puis-je le voir?

    is decdir Je veux voir l'historique des actions effectuées dans le passé de ce fichier et je veux voir qui l'a modifié et la date

    merci

  18.   oscar dit

    Je veux vérifier l'historique des modifications de ce

    Comme je peux le faire

    merci

  19.   Andres Ledo dit

    Bonjour,

    Je pense que dans le script ubuntu vous avez fait une erreur, vous avez mis ap-get -y upgrade au lieu de apt-get -y upgrade. (Vous avez laissé un t).

    Salutations.

    1.    utilisons Linux dit

      C'est comme ca. Je vous remercie!
      Étreinte! Paul

  20.   Gabriel dit

    Je veux savoir comment créer un fichier cron pour pouvoir spécifier l'heure à chaque fois qu'il est exécuté, le répertoire, etc.

  21.   Valentin dit

    Merci d'avoir clarifié le fonctionnement et les commandes de base de cron, maintenant pour vous divertir un peu.

  22.   Sander dit

    Chaque fois que je cherche des informations sur n'importe quel sujet lié à Gnu / Linux, je tourne en rond pour toujours trouver dans 90% des cas le meilleur tutoriel de cette grande communauté, je pense qu'à partir de maintenant je vais commencer ici et puis ailleurs.

    salutations

    1.    utilisons Linux dit

      Merci Sander! Un câlin! Paul.

  23.   Daryo dit

    dom = jour du mois
    dow = jour de la semaine
    c'est plus facile si vous associez

  24.   Pascal dit

    Merci beaucoup, très complet et bien expliqué.

  25.   Maxillaire dit

    C'est la même chose que mon professeur OS nous a donné, je ne change rien, maintenant je vois pourquoi la classe est si mauvaise .-. Eh bien, c'est la même chose que les devoirs xD

  26.   Marcelo dit

    Estimé,

    Requête, la durée d'une tâche peut-elle être limitée?
    Par exemple, j'ai une tâche qui se répète toutes les 5 minutes, à répétition si cette tâche est toujours active, tuez-la et exécutez à nouveau.

    Je vous remercie,
    Marcelo.-

    1.    utilisons Linux dit

      Bonjour Marcelo!

      Je pense qu'il vaudrait mieux que vous souleviez cette question dans notre service de questions et réponses appelé Demander DesdeLinux afin que toute la communauté puisse vous aider avec votre problème.

      Un câlin, Pablo.

  27.   aj dit

    bon post.
    Quelle est la commande par terminal pour ajouter des tâches à la crontab (sans entrer dans la crontab et les ajouter manuellement avec «crontab -e» ou remplacer la crontab par une autre crontab avec «crontab file»).
    L'idée est de créer un script externe pour ajouter les tâches à la crontab
    merci

    1.    david dit

      il me semble que vous pourriez utiliser 'echo' tout ce que vous voulez ajouter '| cat >> 'chemin cronotab (/ etc / cronotab)' «

  28.   Rafael Véra dit

    Comment une expression s'exécuterait-elle exactement tous les 3 jours

  29.   José Antonio dit

    Salut.

    J'ai un problème lors de l'exécution d'une tâche cron.

    J'exécute la tâche suivante avec cronta -e:

    01 * * * * racine /home/user/script/mfile.sh

    mais la tâche n'est pas terminée. J'ai vérifié que myfile.sh a l'autorisation d'exécution et que l'utilisateur qui l'exécute est root.

    J'exécute la même tâche dans / etc / crontab et après le redémarrage du service, cela ne fonctionne pas non plus pour moi.
    Le contenu de myfile.sh est une commande qui met à jour une base de données et si je l'exécute dans la console, cela fonctionne.
    une idée de ce que peut être le problème?

    1.    Fredd dit

      L'utilisateur de la base de données n'a peut-être pas toutes les autorisations et vous devrez d'abord exporter les variables d'environnement à partir de votre moteur de base de données.
      Par exemple, dans db2, cette ligne irait au début du script
      . / home / db2inst1 / sqllib / db2profile

      Une autre cause pourrait être que le script nécessite une connexion à la base de données, établissez la connexion à la base de données dans le script

  30.   LA3 dit

    Je ne savais pas que je devais redémarrer le crond, je me battais avec ça depuis un moment

  31.   Kenya dit

    Ils sauront indiquer que la tâche est exécutée chaque fin de mois, à l'heure indiquée .. le détail est que je ne peux pas réaliser comment je sais que cela prend le dernier jour de chaque mois .. ??? J'ai dû les écrire un à un mais quand vient la fin du mois de février que c'est biciesto c'est compliqué pour moi.

  32.   Jésus dit

    Bonjour!!

    Comment arrêter le processus en cours d'exécution dans la crontab?

  33.   Jésus dit

    processus * …………

  34.   Julianna dit

    Serait-ce que tu peux m'aider? eu tenho um script par minha écrit qui ne fonctionne pas sans crontab! jб dei toutes les autorisations, aucun cron ou utilisateur privé spécifique qui peut l'exécuter - presque rien ne se passe! J'aimerais savoir si vous pouvez m'aider, d'autres choses ne fonctionnent pas! Vlws

  35.   Anthox dit

    Comment mettriez-vous une tâche à exécuter tous les derniers jours du mois (jours: 31-30-28)?

  36.   tfercho dit

    Comme vous le savez, la commande su est utilisée pour changer d'utilisateur dans une console. Si j'utilise la commande su ainsi: "votre utilisateur" changez d'utilisateur mais sans les paramètres appropriés de "user", si je lance su en tant que: "su - user" changez d'utilisateur en chargeant les paramètres utilisateur. Avec cron j'indique l'utilisateur, mais comment charger les configurations de cet utilisateur?

  37.   Voler dit

    Et si je veux l'arrêter?

  38.   Regi dit

    Salut,
    Je ne sais pas ce que je fais mal, mais je suis les étapes et rien n'est exécuté. Je ai testé:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * racine / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * racine usr / bin / test.sh

    et rien du tout. Il n'exécute rien. J'ai redémarré et tout.

  39.   Ferqos dit

    merci beaucoup