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
CommandeEffet
systemctl status apache2État, PID, dernières lignes de journal
sudo systemctl start apache2Démarrer maintenant
sudo systemctl stop apache2Arrêter
sudo systemctl restart apache2Redémarrer (coupe les connexions)
sudo systemctl reload apache2Recharger la config sans couper (si le service le permet)
sudo systemctl enable apache2Lancer au démarrage
sudo systemctl enable --now apache2enable + start en une fois
sudo systemctl disable apache2Ne plus lancer au démarrage
systemctl is-active apache2 / is-enabledRéponse courte (utile en script)
systemctl list-units --type=service --state=runningServices en cours
systemctl --failedServices en échec
sudo systemctl daemon-reloadAprès modification d’un fichier .service

Noms qui diffèrent selon la distribution : SSH = ssh (Debian/Ubuntu) ou sshd (Arch) ; Apache = apache2 (Debian) ou httpd (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.target
sudo systemctl daemon-reload
sudo systemctl enable --now bot-discord
journalctl -u bot-discord -f

2. 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 journaux

Fichiers texte classiques dans /var/log/ :

FichierContenu
/var/log/syslog (Debian)Journal général
/var/log/auth.log (Debian)Connexions, sudo, SSH
/var/log/apache2/error.log / access.logServeur web
/var/log/mysql/error.logMariaDB
/var/log/squid/access.logProxy

Sur Arch (et Debian 12+ minimal), tout passe par journalctl : il n'y a pas forcément de syslog texte.


3. Processus

CommandeEffet
ps auxTous les processus
ps aux | grep pythonTrouver un processus
pgrep -a pythonIdem, plus propre
top / htop / btopMoniteur interactif (q pour quitter)
kill 1234Demander l’arrêt du PID 1234 (signal TERM)
kill -9 1234Forcer l’arrêt (KILL) - en dernier recours
pkill -f bot.pyTuer par nom
commande &Lancer en arrière-plan
jobs, fg, bgGé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          # lister

Format : 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
ChampValeursSpécial
minute0-59* = chaque, */15 = toutes les 15, 1,31 = liste, 1-5 = plage
heure0-23
jour du mois1-31
mois1-12
jour de la semaine0-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).

Voir aussi