L05 - Services (systemd), processus, journaux et tâches planifiées
Objectif
Démarrer/arrêter un service, le lancer au démarrage, lire ses journaux, surveiller les processus et planifier des tâches.
1. Services avec systemd
Un service (ou démon) est un programme qui tourne en arrière-plan : sshd, apache2, mariadb… systemd les gère.
stateDiagram-v2 [*] --> inactif inactif --> actif: systemctl start actif --> inactif: systemctl stop actif --> actif: systemctl restart / reload actif --> echec: plantage echec --> actif: systemctl restart note right of inactif "enable" = démarrage automatique au boot (indépendant de start/stop) end note
| Commande | Effet |
|---|---|
systemctl status apache2 | État, PID, dernières lignes de journal |
sudo systemctl start apache2 | Démarrer maintenant |
sudo systemctl stop apache2 | Arrêter |
sudo systemctl restart apache2 | Redémarrer (coupe les connexions) |
sudo systemctl reload apache2 | Recharger la config sans couper (si le service le permet) |
sudo systemctl enable apache2 | Lancer au démarrage |
sudo systemctl enable --now apache2 | enable + start en une fois |
sudo systemctl disable apache2 | Ne plus lancer au démarrage |
systemctl is-active apache2 / is-enabled | Réponse courte (utile en script) |
systemctl list-units --type=service --state=running | Services en cours |
systemctl --failed | Services en échec |
sudo systemctl daemon-reload | Après modification d’un fichier .service |
Noms qui diffèrent selon la distribution : SSH =
ssh(Debian/Ubuntu) ousshd(Arch) ; Apache =apache2(Debian) ouhttpd(Arch, RHEL).
Créer son propre service (ex. ton bot Discord)
/etc/systemd/system/bot-discord.service :
[Unit]
Description=Bot Discord en Python
After=network-online.target
Wants=network-online.target
[Service]
User=thesky1966
WorkingDirectory=/home/utilisateur/discord-bot
ExecStart=/home/utilisateur/discord-bot/.venv/bin/python bot.py
Restart=on-failure
RestartSec=5
EnvironmentFile=/home/utilisateur/discord-bot/.env
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now bot-discord
journalctl -u bot-discord -f2. Journaux
journalctl -u ssh -e # journal d'un service, aller à la fin
journalctl -u apache2 -f # suivre en direct
journalctl -b -p err # erreurs depuis le dernier démarrage
journalctl --since "1 hour ago"
journalctl --disk-usage
sudo journalctl --vacuum-time=2weeks # nettoyer les vieux journauxFichiers texte classiques dans /var/log/ :
| Fichier | Contenu |
|---|---|
/var/log/syslog (Debian) | Journal général |
/var/log/auth.log (Debian) | Connexions, sudo, SSH |
/var/log/apache2/error.log / access.log | Serveur web |
/var/log/mysql/error.log | MariaDB |
/var/log/squid/access.log | Proxy |
Sur Arch (et Debian 12+ minimal), tout passe par
journalctl: il n'y a pas forcément desyslogtexte.
3. Processus
| Commande | Effet |
|---|---|
ps aux | Tous les processus |
ps aux | grep python | Trouver un processus |
pgrep -a python | Idem, plus propre |
top / htop / btop | Moniteur interactif (q pour quitter) |
kill 1234 | Demander l’arrêt du PID 1234 (signal TERM) |
kill -9 1234 | Forcer l’arrêt (KILL) - en dernier recours |
pkill -f bot.py | Tuer par nom |
commande & | Lancer en arrière-plan |
jobs, fg, bg | Gérer les tâches de fond du terminal |
nohup commande & | Continuer après fermeture du terminal (ou mieux : tmux, O05 - tmux) |
Ressources : free -h (mémoire), df -h (disques), du -sh dossier (taille d’un dossier), uptime (charge), lsblk (disques et partitions).
4. Tâches planifiées
cron
crontab -e # éditer SES tâches (sudo crontab -e : celles de root)
crontab -l # listerFormat : minute heure jour_du_mois mois jour_de_la_semaine commande
# m h jm mois js commande
0 20 * * * /home/utilisateur/scripts/sauvegarde_rsync.sh "/src" "/dest" 7
*/15 * * * * /usr/bin/php /var/www/glpi/front/cron.php
0 3 * * 1 apt-get update -q # le lundi à 3 h
| Champ | Valeurs | Spécial |
|---|---|---|
| minute | 0-59 | * = chaque, */15 = toutes les 15, 1,31 = liste, 1-5 = plage |
| heure | 0-23 | |
| jour du mois | 1-31 | |
| mois | 1-12 | |
| jour de la semaine | 0-7 (0 et 7 = dimanche) |
Générateur/vérificateur en ligne : crontab.guru. Dans cron, utilise des chemins absolus (le PATH est minimal) et redirige la sortie :
>> /var/log/ma_tache.log 2>&1.
Timers systemd (alternative moderne)
Un .timer déclenche un .service ; systemctl list-timers les liste. Avantage : journaux dans journalctl, rattrapage si la machine était éteinte (Persistent=true).