| Prochaine révision | Révision précédente |
| elearning:workbooks:centos:8:junior:l110 [2021/06/02 15:34] – created admin | elearning:workbooks:centos:8:junior:l110 [2024/09/12 09:13] (Version actuelle) – admin |
|---|
| ~~PDF:LANDSCAPE~~ | ~~PDF:LANDSCAPE~~ |
| |
| Version : **2021.01** | Version : **2024.01** |
| |
| Dernière mise-à-jour : ~~LASTMOD~~ | Dernière mise-à-jour : ~~LASTMOD~~ |
| |
| ======LCF205 - Gestion des Tâches====== | ======LCF505 - Gestion des Tâches====== |
| |
| =====Contenu du Module===== | =====Contenu du Module===== |
| |
| * **LCF205 - Gestion des Tâches** | * **LCF505 - Gestion des Tâches** |
| * Contenu du Module | * Contenu du Module |
| * cron | * LAB #1 - cron |
| * Le Fichier /etc/crontab | * 1.1 - Le Fichier /etc/crontab |
| * Les Champs Temporels | * 1.2 - Les Champs Temporels |
| * Les crontabs Utilisateurs | * 1.3 - Les crontabs Utilisateurs |
| * anacron | * LAB #2 - anacron |
| * at | * 2.1 - Le Fichier /etc/anacrontab |
| | * 2.2 - Les Champs Temporels |
| | * 2.3 - Le Fichier /var/spool/anacron/cron.daily |
| | * LAB #3 - at |
| | * 3.1 - Le Répertoire /var/spool/at/ |
| |
| =====cron===== | =====cron===== |
| |
| <WRAP center round important> | <WRAP center round important 60%> |
| **Important** : Le service crond présume que la machine est allumée en permanence. | **Important** : Le service crond présume que la machine est allumée en permanence. |
| </WRAP> | </WRAP> |
| Sous RHEL/CentOS, les crontabs des utilisateurs ont comme nom, le nom de l'utilisateur qui les crée et se trouvent dans le répertoire **/var/spool/cron/**. Par exemple, le crontab propre à l'utilisateur trainee est le fichier **/var/spool/cron/trainee**. Le service crond exécute des tâches en rajoutant une ligne dans son fichier de journalisation **/var/log/cron**. | Sous RHEL/CentOS, les crontabs des utilisateurs ont comme nom, le nom de l'utilisateur qui les crée et se trouvent dans le répertoire **/var/spool/cron/**. Par exemple, le crontab propre à l'utilisateur trainee est le fichier **/var/spool/cron/trainee**. Le service crond exécute des tâches en rajoutant une ligne dans son fichier de journalisation **/var/log/cron**. |
| |
| ====Le Fichier /etc/crontab==== | ====1.1 - Le Fichier /etc/crontab==== |
| |
| Sous RHEL/CentOS le fichier /etc/crontab prend la forme suivante : | Sous RHEL/CentOS le fichier /etc/crontab prend la forme suivante : |
| |
| <code> | <code> |
| [root@centos7 ~]# cat /etc/crontab | [root@centos8 ~]# cat /etc/crontab |
| SHELL=/bin/bash | SHELL=/bin/bash |
| PATH=/sbin:/bin:/usr/sbin:/usr/bin | PATH=/sbin:/bin:/usr/sbin:/usr/bin |
| </code> | </code> |
| |
| <WRAP center round important> | <WRAP center round important 60%> |
| Dans le fichier /etc/crontab, on peut constater la définition de variables dont SHELL, MAILTO et PATH. Ces variables sont différentes des variables système. Notez que sous RHEL/CentOS, le fichier **/etc/crontab** ne contient aucune tâche à exécuter. | **Important** - Dans le fichier /etc/crontab, on peut constater la définition de variables dont SHELL, MAILTO et PATH. Ces variables sont différentes des variables système. Notez que sous RHEL/CentOS, le fichier **/etc/crontab** ne contient aucune tâche à exécuter. |
| </WRAP> | </WRAP> |
| |
| ====Les Champs Temporels==== | ====1.2 - Les Champs Temporels==== |
| |
| Chaque ligne dans un fichier /etc/crontab contient 5 champs temporels qui décrivent le périodicité de l'exécution de la tâche concernée. | Chaque ligne dans un fichier /etc/crontab contient 5 champs temporels qui décrivent le périodicité de l'exécution de la tâche concernée. |
| | Une périodicité telle 0-23/2 | Dans le champs heures = toutes les deux heures | | | Une périodicité telle 0-23/2 | Dans le champs heures = toutes les deux heures | |
| |
| ====Les crontabs Utilisateurs==== | Par exemple, voici le fichier **/etc/cron.d/0hourly** : |
| | |
| | <code> |
| | [root@centos8 ~]# cat /etc/cron.d/0hourly |
| | # Run the hourly jobs |
| | SHELL=/bin/bash |
| | PATH=/sbin:/bin:/usr/sbin:/usr/bin |
| | MAILTO=root |
| | 01 * * * * root run-parts /etc/cron.hourly |
| | </code> |
| | |
| | ====1.3 - Les crontabs Utilisateurs==== |
| |
| Chaque utilisateur peut avoir sa propre version d'un fichier crontab. Pour vérifier s'il existe une version de crontab pour lui, l'utilisateur lancera la commande suivante : | Chaque utilisateur peut avoir sa propre version d'un fichier crontab. Pour vérifier s'il existe une version de crontab pour lui, l'utilisateur lancera la commande suivante : |
| |
| <code> | <code> |
| [trainee@centos7 ~]$ crontab -l | [root@centos8 ~]# exit |
| | logout |
| | [trainee@centos8 ~]$ crontab -l |
| no crontab for trainee | no crontab for trainee |
| </code> | </code> |
| Afin de créer votre fichier crontab, lancez la commande crontab avec l'option -e en tant que votre nom d'utilisateur et non en tant que root : | Afin de créer votre fichier crontab, lancez la commande crontab avec l'option -e en tant que votre nom d'utilisateur et non en tant que root : |
| |
| $ crontab -e [Entrée] | <code> |
| | [trainee@centos8 ~]$ crontab -e |
| | </code> |
| |
| Cette commande lance l'interface de l'éditeur **vi**. Tapez ensuite le texte suivant : | Cette commande lance l'interface de l'éditeur **vi**. Tapez ensuite le texte suivant : |
| |
| <code> | <code> |
| [trainee@centos7 ~]$ crontab -e | [trainee@centos8 ~]$ crontab -e |
| no crontab for trainee - using an empty one | no crontab for trainee - using an empty one |
| crontab: installing new crontab | crontab: installing new crontab |
| </WRAP> | </WRAP> |
| |
| Le fichier crontab que vous venez de créer sous RHEL/CentOS, au nom de votre utilisateur, a été écrit sur le disque dans le répertoire **/var/spool/cron/**. | Le fichier crontab que vous venez de créer, au nom de votre utilisateur, a été écrit sur le disque dans le répertoire **/var/spool/cron/**. |
| |
| Malgré le fait que vous venez de l'éditer, vous ne pouvez pas visualiser votre fichier en tant que simple utilisateur avec la commande cat. Seule la commande crontab -e vous permettra de consulter ou modifier votre fichier crontab. | Malgré le fait que vous venez de l'éditer, vous ne pouvez pas visualiser votre fichier en tant que simple utilisateur avec la commande cat. Seule la commande crontab -e vous permettra de consulter ou modifier votre fichier crontab. |
| |
| <code> | <code> |
| [trainee@centos7 ~]$ su - | [trainee@centos8 ~]$ su - |
| Password: fenestros | Password: fenestros |
| Last login: Sat Oct 24 16:22:56 CEST 2015 on pts/0 | [root@centos8 ~]# cat /var/spool/cron/trainee |
| [root@centos7 ~]# cat /var/spool/cron/trainee | |
| * * * * * /bin/pwd > pwd.txt | * * * * * /bin/pwd > pwd.txt |
| </code> | </code> |
| Par contre, si root inscrit le nom d'un utilisateur dans /etc/cron.deny et cet utilisateur a déjà planifié des tâches avec son propre fichier crontab, les tâches seront exécutées. Pour détruire les tâches planifiées de l'utilisateur, il faut détruire le fichier crontab de l'utilisateur. | Par contre, si root inscrit le nom d'un utilisateur dans /etc/cron.deny et cet utilisateur a déjà planifié des tâches avec son propre fichier crontab, les tâches seront exécutées. Pour détruire les tâches planifiées de l'utilisateur, il faut détruire le fichier crontab de l'utilisateur. |
| |
| =====anacron===== | =====LAB #2 - anacron===== |
| |
| L'inconvénient avec crond est qu'afin que celui-ci puisse exécuter des tâches automatiquement, la machine doit rester allumée en permanence. | L'inconvénient avec crond est qu'afin que celui-ci puisse exécuter des tâches automatiquement, la machine doit rester allumée en permanence. |
| |
| Il existe un alternatif très efficace pour des machines qui ne sont pas constamment allumée. Cette solution est le logiciel Anacron. Sous RHEL/CentOS, l'utilisation d'anacron **remplace** l'utilisation de cron pour les tâches système. | Il existe un alternatif très efficace pour des machines qui ne sont pas constamment allumée. Cette solution est le logiciel Anacron. Sous RHEL/CentOS, l'utilisation d'anacron **remplace** l'utilisation de cron pour les tâches système. |
| | |
| | ====2.1 - Le Fichier /etc/anacrontab==== |
| |
| Ouvrez donc le fichier /etc/anacrontab : | Ouvrez donc le fichier /etc/anacrontab : |
| |
| <code> | <code> |
| [root@centos7 ~]# cat /etc/anacrontab | [root@centos8 ~]# cat /etc/anacrontab |
| # /etc/anacrontab: configuration file for anacron | # /etc/anacrontab: configuration file for anacron |
| |
| </code> | </code> |
| |
| Vous noterez que ce fichier fait référence aux répertoires cron.daily, cron.weekly et cron.monthly. | Vous noterez que ce fichier fait référence aux répertoires **/etc/cron.daily**, **/etc/cron.weekly** et **/etc/cron.monthly**. |
| | |
| | ====2.2 - Les Champs Temporels==== |
| |
| Les deux premiers champs sont des champs temporels. Dans le cas d'anacron ceux-ci correspondent à: | Les deux premiers champs sont des champs temporels. Dans le cas d'anacron ceux-ci correspondent à: |
| |
| ^ Période ^ Délai ^ | ^ Période ^ Délai ^ |
| | La périodicité en jours | Le délai en minutes, après le démarrage d'anacron et avant l'exécution des tâches dans le répertoire concerné | | | La périodicité en jours | Le délai en minutes, après le **démarrage d'anacron** et avant l'exécution des tâches dans le répertoire concerné | |
| |
| Anacron mémorise dans les fichiers qui se trouvent dans **/var/spool/anacron/** la date à laquelle il a exécuté les commandes qui se trouvent dans anacrontab pour la dernière fois. Ces fichiers sont appelés cron.daily, cron.weekly et cron.monthly. | Anacron mémorise dans les fichiers qui se trouvent dans **/var/spool/anacron/** la date à laquelle il a exécuté les commandes qui se trouvent dans anacrontab pour la dernière fois. Ces fichiers sont appelés cron.daily, cron.weekly et cron.monthly. |
| |
| <code> | <code> |
| [root@centos7 ~]# ls /var/spool/anacron/ | [root@centos8 ~]# ls /var/spool/anacron/ |
| cron.daily cron.monthly cron.weekly | cron.daily cron.monthly cron.weekly |
| [root@centos7 ~]# cat /var/spool/anacron/cron.daily | [root@centos8 ~]# cat /var/spool/anacron/cron.daily |
| 20150604 | 20210602 |
| [root@centos7 ~]# cat /var/spool/anacron/cron.weekly | [root@centos8 ~]# cat /var/spool/anacron/cron.weekly |
| 20150601 | 20210602 |
| [root@centos7 ~]# cat /var/spool/anacron/cron.monthly | [root@centos8 ~]# cat /var/spool/anacron/cron.monthly |
| 20150601 | 20210526 |
| </code> | </code> |
| | |
| | ====2.3 - Le Fichier /var/spool/anacron/cron.daily==== |
| |
| Sous RHEL/CentOS, anacron consulte le fichier **/var/spool/anacron/cron.daily** chaque heure grâce à l'exécution du script **/etc/cron.hourly/0anacron** et, en fonction de la date inscrite dans le fichier et la date du jour, décide si oui ou non s'il doit exécuter la ligne de commande. | Sous RHEL/CentOS, anacron consulte le fichier **/var/spool/anacron/cron.daily** chaque heure grâce à l'exécution du script **/etc/cron.hourly/0anacron** et, en fonction de la date inscrite dans le fichier et la date du jour, décide si oui ou non s'il doit exécuter la ligne de commande. |
| |
| <code> | <code> |
| [root@centos7 ~]# cat /etc/cron.hourly/0anacron | [root@centos8 ~]# cat /etc/cron.hourly/0anacron |
| #!/bin/sh | #!/bin/sh |
| # Check whether 0anacron was run today already | # Check whether 0anacron was run today already |
| fi | fi |
| if [ `date +%Y%m%d` = "$day" ]; then | if [ `date +%Y%m%d` = "$day" ]; then |
| exit 0; | exit 0 |
| fi | fi |
| |
| # Do not run jobs when on battery power | # Do not run jobs when on battery power |
| if test -x /usr/bin/on_ac_power; then | online=1 |
| /usr/bin/on_ac_power >/dev/null 2>&1 | for psupply in AC ADP0 ; do |
| if test $? -eq 1; then | sysfile="/sys/class/power_supply/$psupply/online" |
| exit 0 | |
| | if [ -f $sysfile ] ; then |
| | if [ `cat $sysfile 2>/dev/null`x = 1x ]; then |
| | online=1 |
| | break |
| | else |
| | online=0 |
| | fi |
| fi | fi |
| | done |
| | if [ $online = 0 ]; then |
| | exit 0 |
| fi | fi |
| /usr/sbin/anacron -s | /usr/sbin/anacron -s |
| Ce script a pour but d'exécuter la commande **/usr/sbin/anacron -s**. L'option **-s** indique à anacron d'attendre la fin d'exécution d'un job avant d'exécuter le suivant. | Ce script a pour but d'exécuter la commande **/usr/sbin/anacron -s**. L'option **-s** indique à anacron d'attendre la fin d'exécution d'un job avant d'exécuter le suivant. |
| |
| =====at===== | =====LAB #3 - at===== |
| |
| Tout comme avec la commande cron, root a la possibilité d'accorder ou d'interdire aux utilisateurs le droit d'exécuter des tâches avec at en utilisant les deux fichiers suivants : | Tout comme avec la commande cron, root a la possibilité d'accorder ou d'interdire aux utilisateurs le droit d'exécuter des tâches avec at en utilisant les deux fichiers suivants : |
| Si le fichier at.allow existe, seuls les utilisateurs dans ce fichier pourront exécuter at. | Si le fichier at.allow existe, seuls les utilisateurs dans ce fichier pourront exécuter at. |
| |
| En tant que root, mettez en place maintenant deux tâches pour le 31/12/2018 à 13h00 et 14h00 respectivement : | En tant que root, mettez en place maintenant deux tâches pour le 31/12/2042 à 13h00 et 14h00 respectivement : |
| |
| <code> | <code> |
| [root@centos7 ~]# at 13:00 12/31/2018 | [root@centos8 ~]# at 13:00 12/31/2042 |
| | warning: commands will be executed using /bin/sh |
| at> pwd > /tmp/test13.atd | at> pwd > /tmp/test13.atd |
| at> [^D] | |
| at> <EOT> | at> <EOT> |
| job 1 at Sat Dec 31 13:00:00 2018 | job 1 at Wed Dec 31 13:00:00 2042 |
| |
| [root@centos7 ~]# at 14:00 12/31/2018 | [root@centos8 ~]# at 14:00 12/31/2042 |
| | warning: commands will be executed using /bin/sh |
| at> free > /tmp/test14.atd | at> free > /tmp/test14.atd |
| at> [^D] | |
| at> <EOT> | at> <EOT> |
| job 2 at Sat Dec 31 14:00:00 2018 | job 2 at Wed Dec 31 14:00:00 2042 |
| </code> | </code> |
| | |
| | ====3.1 - Le Répertoire /var/spool/at/==== |
| |
| Sous RHEL/CentOS, les fichiers concernant ces deux tâches sont stockés dans le répertoire **/var/spool/at/** : | Sous RHEL/CentOS, les fichiers concernant ces deux tâches sont stockés dans le répertoire **/var/spool/at/** : |
| |
| <code> | <code> |
| [root@centos7 ~]# ls /var/spool/at | [root@centos8 ~]# ls /var/spool/at |
| a0000101793190 a00002017931cc spool | a000010249d9f8 a000020249da34 spool |
| </code> | </code> |
| |
| |
| <code> | <code> |
| [root@centos7 ~]# cat /var/spool/at/a0000101793190 | [root@centos8 ~]# at -c 2 |
| #!/bin/sh | #!/bin/sh |
| # atrun uid=0 gid=0 | # atrun uid=0 gid=0 |
| # mail trainee 0 | # mail trainee 0 |
| umask 22 | umask 22 |
| XDG_VTNR=1; export XDG_VTNR | LS_COLORS=rs=0:di=38\;5\;33:ln=38\;5\;51:mh=00:pi=40\;38\;5\;11:so=38\;5\;13:do=38\;5\;5:bd=48\;5\;232\;38\;5\;11:cd=48\;5\;232\;38\;5\;3:or=48\;5\;232\;38\;5\;9:mi=01\;05\;37\;41:su=48\;5\;196\;38\;5\;15:sg=48\;5\;11\;38\;5\;16:ca=48\;5\;196\;38\;5\;226:tw=48\;5\;10\;38\;5\;16:ow=48\;5\;10\;38\;5\;21:st=48\;5\;21\;38\;5\;15:ex=38\;5\;40:\*.tar=38\;5\;9:\*.tgz=38\;5\;9:\*.arc=38\;5\;9:\*.arj=38\;5\;9:\*.taz=38\;5\;9:\*.lha=38\;5\;9:\*.lz4=38\;5\;9:\*.lzh=38\;5\;9:\*.lzma=38\;5\;9:\*.tlz=38\;5\;9:\*.txz=38\;5\;9:\*.tzo=38\;5\;9:\*.t7z=38\;5\;9:\*.zip=38\;5\;9:\*.z=38\;5\;9:\*.dz=38\;5\;9:\*.gz=38\;5\;9:\*.lrz=38\;5\;9:\*.lz=38\;5\;9:\*.lzo=38\;5\;9:\*.xz=38\;5\;9:\*.zst=38\;5\;9:\*.tzst=38\;5\;9:\*.bz2=38\;5\;9:\*.bz=38\;5\;9:\*.tbz=38\;5\;9:\*.tbz2=38\;5\;9:\*.tz=38\;5\;9:\*.deb=38\;5\;9:\*.rpm=38\;5\;9:\*.jar=38\;5\;9:\*.war=38\;5\;9:\*.ear=38\;5\;9:\*.sar=38\;5\;9:\*.rar=38\;5\;9:\*.alz=38\;5\;9:\*.ace=38\;5\;9:\*.zoo=38\;5\;9:\*.cpio=38\;5\;9:\*.7z=38\;5\;9:\*.rz=38\;5\;9:\*.cab=38\;5\;9:\*.wim=38\;5\;9:\*.swm=38\;5\;9:\*.dwm=38\;5\;9:\*.esd=38\;5\;9:\*.jpg=38\;5\;13:\*.jpeg=38\;5\;13:\*.mjpg=38\;5\;13:\*.mjpeg=38\;5\;13:\*.gif=38\;5\;13:\*.bmp=38\;5\;13:\*.pbm=38\;5\;13:\*.pgm=38\;5\;13:\*.ppm=38\;5\;13:\*.tga=38\;5\;13:\*.xbm=38\;5\;13:\*.xpm=38\;5\;13:\*.tif=38\;5\;13:\*.tiff=38\;5\;13:\*.png=38\;5\;13:\*.svg=38\;5\;13:\*.svgz=38\;5\;13:\*.mng=38\;5\;13:\*.pcx=38\;5\; |