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.
- 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:
Ugh ... un peu déroutant.
* / 30 est manquant (dans le champ des minutes) qui s'exécute toutes les 30 minutes ...
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.
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.
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.
Bonjour super utile les informations pour clarifier le fonctionnement de cron.
Octets
pour *
Excellent, merci d'avoir clarifié le fonctionnement de cron .. mettons un petit coup de main
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
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!
Non. Si je me souviens bien, pour cela, vous devez mettre / 30 * * * * root Scrip.sh.
Autrement dit, ajoutez le / avant 30.
À votre santé! Paul.
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
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.
La contribution est appréciée.
10 points !!
salut2 !!
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.
homme merci beaucoup, j'ai lu et testé les exemples. merci beaucoup ... c'est très compréhensible. À votre santé
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.
Excellent, très utile !!!
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
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.
À 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
Je veux vérifier l'historique des modifications de ce
Comme je peux le faire
merci
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.
C'est comme ca. Je vous remercie!
Étreinte! Paul
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.
Merci d'avoir clarifié le fonctionnement et les commandes de base de cron, maintenant pour vous divertir un peu.
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
Merci Sander! Un câlin! Paul.
dom = jour du mois
dow = jour de la semaine
c'est plus facile si vous associez
Merci beaucoup, très complet et bien expliqué.
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
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.-
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.
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
il me semble que vous pourriez utiliser 'echo' tout ce que vous voulez ajouter '| cat >> 'chemin cronotab (/ etc / cronotab)' «
Comment une expression s'exécuterait-elle exactement tous les 3 jours
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?
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
Je ne savais pas que je devais redémarrer le crond, je me battais avec ça depuis un moment
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.
Bonjour!!
Comment arrêter le processus en cours d'exécution dans la crontab?
processus * …………
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
Comment mettriez-vous une tâche à exécuter tous les derniers jours du mois (jours: 31-30-28)?
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?
Et si je veux l'arrêter?
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.
merci beaucoup