Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Services en arrière-plan et tâches planifiées (systemd, cron)

Après cette leçon: Je peux faire tourner un programme comme service et planifier une tâche.

Leçon de 55 min8 commandesLab d’administration Linux : utilisateurs, droits, cron et systemd dans le navigateur

L’export du lundi que personne n’a lancé

Chaque lundi à 7 h 45, un employé lançait à la main l’export des commandes de la boutique. Un lundi, il était malade.

Les fichiers du fournisseur ne sont jamais partis. Personne ne s’en est aperçu avant midi.

Une machine doit faire seule le travail qui se répète. Elle doit aussi garder ses programmes importants en marche.

À la fin de cette leçon

Remarque

Je peux faire tourner un programme comme service et planifier une tâche.

Mots-clés

MotCe que ça veut direExemple
Serviceun programme que le système garde en marche en arrière-plan
systemdle programme qui démarre et surveille les servicessystemctl
Fichier d’unitéun petit fichier qui décrit un service à systemd
Activerfaire démarrer un service à chaque démarrage de la machineenable
Cronle programme qui lance des tâches à heure fixe
Ligne cronune ligne qui donne une heure et une commande45 7 * * 1

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

systemd fait tourner les services

Un service est un programme qui doit tourner en permanence, comme un serveur web ou un envoi de courriels. Sous Ubuntu, systemd les démarre au lancement et les surveille.

systemctl sert à parler à systemd. Vous pouvez demander si un service tourne (is-active) et s’il démarre au lancement (is-enabled).

Le service cron tourne-t-il ?

Commande
systemctl is-active cron

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Démarre-t-il au lancement ?

Commande
systemctl is-enabled cron

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Toute l’histoire

Commande
systemctl status cron --no-pager

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le fichier d’unité que systemd lit pour cron

Commande
systemctl cat cron --no-pager

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : les verbes de systemctl

CommandeEffetSurvit à un redémarrage ?
systemctl start courrielsLe démarre maintenantNon
systemctl stop courrielsL’arrête maintenantNon
systemctl restart courrielsL’arrête, puis le démarreNon
systemctl enable courrielsLe fait démarrer au lancementOui
systemctl disable courrielsLui retire ce démarrageOui

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un fichier d’unité a trois parties

Un fichier d’unité est un texte simple. Celui que vous écrivez va dans /etc/systemd/system. Celui qu’installe un paquet se trouve dans /usr/lib/systemd/system. [Unit] décrit le service. [Service] dit quoi lancer dans ExecStart, et s’il faut le relancer après une panne dans Restart. [Install] dit quand il doit démarrer. Le bloc suivant en montre un pour un programme nommé courriels-boutique.

Un fichier d’unité pour un autre programme

Code: bash
[Unit]
Description=Envoi des courriels de la boutique

[Service]
ExecStart=/usr/local/bin/courriels-boutique
Restart=on-failure

[Install]
WantedBy=multi-user.target

Erreur fréquente

Attention

Beaucoup de gens pensent que systemctl start fait aussi revenir le service après un redémarrage. Ce n’est pas le cas. start le lance maintenant. enable le fait démarrer au lancement. Un service qui a besoin des deux reçoit les deux.

Cron lance une commande à heure fixe

Une ligne cron a cinq champs de temps, puis la commande. Les champs sont : minute, heure, jour du mois, mois et jour de la semaine.

Une étoile * veut dire « chaque ». Un nombre veut dire exactement celui-là. Dans le champ minute, */20 veut dire toutes les vingt minutes : 0, 20 et 40.

Exemple travaillé : lire une heure cron

ChampsElle se lance
45 7 * * 1À 07:45 tous les lundis
0 * * * *Au début de chaque heure
*/20 * * * *Toutes les vingt minutes
0 9 1 * *À 09:00 le premier de chaque mois
30 22 * * 5À 22:30 tous les vendredis

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Votre propre liste de tâches

Commande
crontab -l

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Deux lignes d’exemple pour cron

Code: bash
# minute heure jour mois jour_semaine utilisateur commande
45 7 * * 1 root /usr/local/bin/export-commandes.sh
*/20 * * * * root /usr/local/bin/synchro-stock.sh

Le dossier système a un champ de plus

La liste d’un utilisateur, que montre crontab -l, a les cinq champs de temps puis la commande.

Un fichier de /etc/cron.d a en plus l’utilisateur qui lance la tâche, entre l’heure et la commande. Cron ignore sans rien afficher un fichier qui ne lui plaît pas. Le propriétaire doit être root, et personne d’autre ne doit pouvoir y écrire. Le nom ne doit pas contenir de point : export.cron est ignoré. La dernière ligne doit finir par un retour à la ligne.

Le dossier des tâches du système

Commande
ls -l /etc/cron.d

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un script qui attend d’être planifié

Commande
cat /usr/local/bin/backup.sh

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

systemd a aussi ses minuteries

Commande
systemctl list-timers --no-pager

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Cron lit 1-5 dans le champ jour de la semaine comme « du lundi au vendredi ». Sur papier, écrivez la ligne d’un fichier de /etc/cron.d qui lance /usr/local/bin/synchro-stock.sh en root à 22:45, les jours ouvrés seulement.

Dites ensuite quand elle passera la prochaine fois s’il est vendredi, 23:00.

À propos de ce labo et de sa source: Lab d’administration Linux : utilisateurs, droits, cron et systemd dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.