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\; |