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
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Service | un programme que le système garde en marche en arrière-plan | |
| systemd | le programme qui démarre et surveille les services | systemctl |
| Fichier d’unité | un petit fichier qui décrit un service à systemd | |
| Activer | faire démarrer un service à chaque démarrage de la machine | enable |
| Cron | le programme qui lance des tâches à heure fixe | |
| Ligne cron | une ligne qui donne une heure et une commande | 45 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 ?
systemctl is-active cronAffiché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 ?
systemctl is-enabled cronAffiché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
systemctl status cron --no-pagerAffiché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
systemctl cat cron --no-pagerAffiché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
| Commande | Effet | Survit à un redémarrage ? |
|---|---|---|
| systemctl start courriels | Le démarre maintenant | Non |
| systemctl stop courriels | L’arrête maintenant | Non |
| systemctl restart courriels | L’arrête, puis le démarre | Non |
| systemctl enable courriels | Le fait démarrer au lancement | Oui |
| systemctl disable courriels | Lui retire ce démarrage | Oui |
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
[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
| Champs | Elle 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
crontab -lAffiché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
# 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
ls -l /etc/cron.dAffiché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é
cat /usr/local/bin/backup.shAffiché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
systemctl list-timers --no-pagerAffiché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.