Vous êtes sur la page 1sur 39

AIAC, cycle d’ingénieur GI Année scolaire: 2019/2020

GNU/Linux
Chapitre 4: Séquence de démarrage et planification des
tâches

M O U N I A Z AY D I
M . Z AY D I @ U H P. A C . M A
Chapitre 4:
Démarrage du système (boot), niveaux de
fonctionnement et planification des tâches
Points couverts

Démarrage du système
Lancement du système : boot et chargement du noyau(kernel)
Lancement du système : boot -> init
Lancement du système : boot -> init -> modules/services
 Runlevels: targets
Planification des tâches
AT;
CRON.
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Lancement du système : boot et chargement du noyau


BIOS

 A la mise sous tension , le bios se met en œuvre (Basic


Input/Output System) , petit logiciel inscrit sur une mémoire MBR
morte , il effectue des opération d’inventaire sur le matériel.
 POST (power on self test)
Bootloader
 Bios lance un lecteur de boot :accède séquentiellement aux
périphériques bootables susceptibles de contenir un bootable
Noyau
 Bios trouve le MBR et lui donne la main;

 Le MBR :est fichier qui contient un petit programme qui , lui , init[1]
va lancer un boot loader.

processus
processus
processus
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Lancement du système : boot et chargement du noyau


BIOS

 Le bootloader : charge le noyau en mémoire et l'exécute


MBR

 2 bootloader possibles: Grub (Grand Unified Bootloader), grub


legacy, grub 2 Bootloader

 Une fois le noyau chargé en mémoire , il se décompresse , fait Noyau


des opérations d’initialisation , et lance le premier processus ( le
père de tous les processus ) : init ( initd)
init[1]

processus
processus
processus
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Lancement du système : boot -> init


BIOS

MBR
 Une fois le noyau chargé en mémoire, il lance le
premier processus : /bin/init
Bootloader

 init est le père de tous les autres processus (cela est


Noyau
visible avec la commande pstree).

init[1]

processus
processus
processus
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Lancement du système : boot -> init


Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Lancement du système : boot -> systemd


Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Lancement du système : boot -> init

 init lit le fichier /etc/inittab pour savoir :

- quel est le fichier à exécuter pour continuer le chargement du système;

- quel est le runlevel (niveau d'exécution) par défault;

- comment lancer les services pour un runlevel donné.

Qu'est-ce qu'un runlevel ?


C'est un niveau représentant l'état du système dans lequel tourne le système linux. Ce
niveau porte un nom (relativement arbitraire) et définit un ensemble de programmes qui
doivent être lancés ou arrêtés.
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Runlevels

Un runlevel décrit un état du système ou un niveau de fonctionnement. Il existe sept


runlevels distincts. Chaque runlevel ou niveau propose des services différents:

0 arrêt du système effectué par la commande init 0  halt

1 Mode single-user (mode mono-utilisateur) pour des opérations particulières. C'est


généralement le mode de maintenance (un seul utilisateur, pas de mode réseau, ...)

2 Mode multi-utilisateurs, réseau activé avec services réseaux de base comme telnet (sans
services réseau sous Linux)(connexion en mode texte & services limités)

3 mode normal , Mode multi-utilisateurs avec services réseau sous Linux, comme NFS
(Tous les services nécessaires sont démarrés et plusieurs utilisateurs peuvent se connecter en
mode texte.)
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Runlevels

4 Mode multi-utilisateur spécifique, à construire soi-même, souvent inutilisé

5 mode normal avec XWindow (Identique au mode 3, mais les utilisateurs peuvent se
connecter en mode graphique et disposer d'un gestionnaire de fenêtre.)

6 redémarrage du système (Reboot de la machine (shutdown -r)

s,S : Mode single-user sur Unix avec console root, pas présent dans inittab.

Les runlevels 0, 1 et 6 sont toujours utilisés tels que décrits ci-dessus.

L'usage des autres runlevels peut varier en fonction de la distribution de Linux.


Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Runlevels
Commandes relatives aux runlevels:

who –r : cette commande donne le runlevel courant pour les utilisateurs;


Runlevel : pour l’administrateur ;
« init » et « telinit » : suivies du runlevel commutent le système dans ce runlevel
(autorisé seulement pour l’administrateur ).

Exemple :
init 0 , ou telinit 0 arrête le système
init 6 , telinit 6 reboot le système
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Runlevels
Lancement du système : boot -> init -> modules/services

 Après le chargement du noyau, le script correspondant à sysinit dans fichier inittab


est chargé :

- Fedora,RedHat Ent : /etc/rc.d/rc.sysinit (1 script ~ 1300 lignes !!)

- Debian : /etc/rc.d/rcS lance les scripts /etc/rcS.d/S??*

 Ce script d'initialisation est chargé de 2 tâches fondamentales :

- charger les modules dans le noyau (gestion des périphériques),

- démarrer les services en exécutant les processus « Deferred Auxiliary


Executive Monitor » (daemons) correspondant, en français : démons.
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Runlevels
Lancement du système : boot -> init -> modules/services

Le mécanisme de démarrage des services est caractéristique d'une Distribution (


incompatibilités entre distributions)

le répertoire /etc/init.d contient tous les scripts de gestion des services installés (1 service
<-> 1 ou plusieurs démon(s))
Exemple :
/etc/rc.d/rc.sysinit qui s'occupe de l'initialisation du système,
/etc/rc.d/rc 3 :ce script lance tous les services (web, nfs, crontab, bind, ...) pour
le runlevel 3.

les lignes « /etc/rc.d/rc x » du fichier /etc/inittab déterminent le lancement des scripts


pour le runlevel x.
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Runlevels

Les liens contenus dans /etc/rc.d/rc3.d (par exemple) ont des noms pécifiques :

 Snn<Nom_service> : S pour start, nn est une valeur numérique sur deux


caractères (01 05 10 15 ou autre) déterminant l'ordre de lancement des services
S01init
S05network
S10nfs
S15usb
S20sound

 Knn<Nom_service> : K pour Kill, nn la valeur déterminant l'ordre d'arrêt des


services.
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Scripts de lancement

Le runlevel (numéro de 0 à 6) fixe le répertoire de démarrage des services :


- Fedora -> répertoires /etc/rc.d/rc[06].d
- Debian -> répertoires /etc/rc[06].d

rcX.d : contient des liens symboliques vers les scripts de gestions des
services qui sont dans le répertoire :
- /etc/rc.d/init.d (Fedora + lien symbolique vers /etc/init.d)
-/etc/init.d (Debian )

Utilitaires en mode console : ( changer les runlevels )


- Debian : updaterc.d
- Mandrake , Fedora : chkconfig, service
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Scripts de lancement
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Systemd

Systemd est un système d’initialisation et un démon qui a été spécifiquement conçu pour
le noyau Linux comme alternative à System V. Il permet de configurer les services qui
sont lancés au démarrage.

Lister les services actifs:

#systemctl list-units --type=service

Connaitre l'état d'un service :

#systemctl is-active sshd


Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Systemd

Activer / Désactiver un service au démarrage :

#systemctl enable/disable service_name

Stop et Start d'un service:


Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Systemd

• Reload: recharger la configuration;


• Restart: redémarrer le service.

Lister les dépendances d'un service :

#systemctl list-dependencies service_name

Exemple:

#systemctl list-dependencies atd


Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Systemd

afficher la configuration d'un service:

#systemctl cat service_name


Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Exercice démarrage des services avec avec Systemctl

 Vérifier l'installation du serveur SSH


 Vérifier son état
 Le désactiver au démarrage
 Arrêter le service
 Réactiver le service au démarrage
 Vérifier l'état du service
 Obtenir des journaux plus détaillés
 Démarrer le service
 Vérifier l'état du service
 Relancer le service
 Vérifier l'état du service
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Scripts de lancement

Pour démarrer un service par exemple sous Fedora, on peut taper :


service <nom_du_service> start
ou encore :
/etc/rc.d/init.d/<cript_correspondant_au_service> action
action : start | stop | restart | status | reload...
Etat de demarrage de tout les services : service - -status-all |more
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Scripts de lancement

Commandes utiles
Pour les distributions RedHat et Mandrak
chkconfig
/sbin/chkconfig --add le_service
Note: le daemon doit obligatoirement se trouver dans /etc/rc.d/init.d ou /etc/init.d.
/sbin/chkconfig --list
Pour activer ou désactiver un service au démarrage :
/sbin/chkconfig --level 123456 mon_service on/off
Chapitre 4: Démarrage du système (boot), niveaux de fonctionnement

Scripts de lancement

Commandes utiles
Pour Debian /Ubuntu : update-rc.d

Les services démarrés par défauts:

#Update-rc.d (service) defaults

Démarrer un service au démarrage:

#Update-rc.d (service) start/stop 3 4 5 (runlevel)

Stopper un service au démarrage:

#Update-rc.d -f (service) remove


Chapitre 4: planification des tâches

Mode d’éxécution d’une commande


Le mode différé:
• L’exécution différée d’une commande est réalisée à l’aide de la commande at qui permet de
déclencher l’exécution d’une commande à une date fixée;

at 20:05: 22/05/08 <commande

• Demandera le lancement du contenu de commande le 22/05/08 à 20h 05


• L’autorisation d’utilisation de at pour un utilisateur est indiquée dans le fichier /etc/at.allow si
ce fichier n’existe pas , le fichier /etc/at.deny est vérifié pour déterminer si l’accès à la
commande at doit être interdit à l’utilisateur ;
• Si /etc/at.deny est vide , l’utilisation de at est permise pour tout le monde.
Chapitre 4: planification des tâches

Mode d’éxécution d’une commande


Le mode différé:

• Par défaut at lance sh , le processus crée ne sera associé à aucun terminal;


• Les sorties sont soit redirigées , soit envoyées à l’utilisateur par mail;
• Gestion des processus différés en cours :
 Les commandes : atq (at – l) : liste des processus en cours avec indication du numéro
d’identification
 atrm ( at –d numero_at) : suppression des processus lancés par l’utilisateur
Chapitre 4: planification des tâches

Mode d’éxécution d’une commande


Le mode cyclique

• l’utilisateur va créer un fichier comprenant les indications de répétitions d’exécution de la tache


ainsi que la tache elle-même;
• La commande crontab file va copier le fichier file dans la zone spool du crontab et ainsi le
soumettre à une exécution cyclique

• Dans le répertoire /var/spool/cron , on trouve un fichier au nom de l’utilisateur , ce fichier


contient les commandes à exécuter cycliquement .
Chapitre 4: planification des tâches

Mode d’éxécution d’une commande


Le mode cyclique

• L’exécution cyclique d’une tache est réalisé à l aide de la commande crontab.


• Le processus cron(daemon) scrute un fichier dans le quel sont définies les commandes à
exécuter à date fixe;

• Les autorisations sont identiques à la commande at vue plus haut


 /etc/cron.allow
 /etc/cron.deny
Chapitre 4: planification des tâches

Exécution d’une commande


Fonctionnement

• Le processus crond est normalement lancé au démarrage.


On peut le lancer ou l'arrêter avec /etc/rc.d/init.d/crond

• Les commandes : /etc/rc.d/init.d/crond status : etat de démon

 systemctl stop service-name : arrêt du démon (service crond stop/start/restart)


 Systemctl start service : démarrage du démon
 systemctl restart service : arrêt +démarrage
Chapitre 4: planification des tâches

Exécution d’une commande


Fonctionnement

• Il lit toutes les minutes les fichiers présents dans le répertoire /var/spool/cron (et aussi le fichier
/etc/crontab, pour voir si des tâches doivent être exécutées.

• Chaque action de crond ajoute une ligne de message dans le fichier /var/log/cron, qu'il faut
purger de temps en temps ... par une commande crontab !

• Par défaut si une commande produit un affichage, il est dirigé vers la messagerie
Chapitre 4: planification des tâches

Exécution d’une commande


Fonctionnement
Commande crontab [-u user] {-l | -r | -e }

Options :
• crontab -l : affiche le fichier crontab de l'utilisateur
• crontab –r: efface ce fichier
• crontab -l -u user1 root : examine le fichier crontab de l'user user1
• crontab -e : crée ou édite (pour modification) un fichier temporaire dans
/tmp ouvert dans vi
Lors de la sauvegarde, le fichier est écrit dans /var/spool/cron/$USER, où $USER
est le nom de login de l'utilisateur.
Chapitre 4: planification des tâches

Exécution d’une commande


Syntaxe des lignes des tables crontab
Chaque ligne du fichier contient 6 champs, les 5 premières déterminent les moments d'exécution de la tâche décrite au
6ème champ.
les 5 premiers, séparés par des espaces, appelés champs temporels, décrivent la périodicité : mm hh jj MMM JJJ tâche > log
Champ 1: la minute (0 -59)
Champ 2 : l’heure (0 – 23)
Champ 3 : le jour du mois (1 – 31)
Champ 4: le mois de l’année ( 1-12)
Champ 5 : le jour de la semaine ( 0-6 avec 0 qui représente le dimanche )
minutes (0-59), heures (0-23), jour du mois (1-31), mois de l'année (1-12), jour de la semaine (0-6, 0= dimanche)
le 6ème champ est la commande à exécuter, ce peut être naturellement un script qcq
Chapitre 4: planification des tâches

Exécution d’une commande


Syntaxe des lignes des tables crontab
un champ temporel peut contenir :

• une valeur précise et valide pour le champ (par exemple 15 sur le champ minute)

• une liste de valeurs valides, séparées par des virgules (1,3,5 dans le champ mois : janvier, mars,
mai)

• un intervalle valide (1-5 dans le champ jour : du lundi au vendredi)

• * pour signifier toutes les valeurs possibles du champ (* dans le champ minute : toutes les
minutes)

• */5 (dans le champ minutes : tous les 5 minutes), 0-23/3 (dans le champ heures : toutes les 3
heures)
Chapitre 4: planification des tâches

Exécution d’une commande


Syntaxe des lignes des tables crontab

Exemples
# exécution chaque 1er et 15 de chaque mois à minuit
0 0 1,15 * * commande
# provoquer un reboot la machine chaque 1er et 15 du mois à 2h 30 du matin
30 2 1,15 * * /sbin/shutdown -r
# exécution toutes les heures passées 15 minutes
15 * * * * commande (exemple clear)
# exécution tous les matins du lundi au vendredi à 7 h 30
30 7 * * 1-5 commande (sauvegarde d’une base de données )
Chapitre 4: planification des tâches

Exécution d’une commande


Syntaxe des lignes des tables crontab

Il est possible d’exécuter des scripte d’une manière cyclique, il suffit de créer le script Puis de le déclarer
en tant que tâche dans la table cron.
Exercice 1

1 ) ajouter une entré dans la table cron qui permet d’écrire chaque 5 minutes bonjour ,
on est « la date » dans un fichier , la date doit être remplacer par la date système , et
le fichier dans lequel le système écrira « bonjour `date` » `n est pas crée auparavant
Créer la même tache par l’utilisateur user1, que faut-il vérifier avant ?
2) Lancer le navigateur firefoxe après 5 minutes du lancement du job par at .
Chapitre 4: planification des tâches

Exécution d’une commande


Syntaxe des lignes des tables crontab
Exercice 2

2) La commande df permet de surveiller l’espace disque , pour une bonne gestion on va créer une tache
cyclique qui permet de :
Écrire l’état d’occupation des disques dans le fichier log_df.txt à créer dans /tmp :
Tous les jours à 23h30
Tous les premiers du mois à 23h30
Tous les lundis à 22h28
Du 2 au 5 de chaque mois à 10h12
Tous les jours pairs du mois à 23h59
Chapitre 4: planification des tâches

Exécution d’une commande


Syntaxe des lignes des tables crontab
Exercice 2: corrigé
2) La commande df permet de surveiller l’espace disque , pour une bonne gestion on va créer une tache
cyclique qui permet de :

Tous les jours à 23h30 : 30 23 * * * df >>/tmp/log_df.txt

Tous les premiers du mois à 23h30 : 30 23 1 * * df >>/tmp/log_df.txt

Tous les lundis à 22h28 : 28 22 * * 1 df >>/tmp/log_df.txt

Du 2 au 5 de chaque mois à 10h12 12 10 2-5 * * df >>/tmp/log_df.txt

Tous les jours pairs du mois à 23h59 59 23 */2 * * df >>/tmp/log_df.txt


Chapitre 4: planification des tâches

Exécution d’une commande


Syntaxe des lignes des tables crontab
Exercice 1: corrigé
Exercice 1 : corrigé

2) La commande df permet de surveiller l’espace disque , pour une bonne gestion on va créer une tache
cyclique qui permet de :

étant un utilisateur autorisé

$ crontab –e

# ajouter la ligne (echo -n inhibe le passage à la ligne) :

*/5 * * * * (echo -n Bonjour ! nous sommes le ;date ) >> /tmp/bonjour.txt