Mini-test 9
Verifier le service, le port et lire les logs
6 questions ciblees
Cliquez Voir la solution sur chaque slide
Question 1 / 6 verifier un service
ircd-hybrid. Donnez la commande systemd
qui teste si le service est en cours, et la version qui s'integre
a un if sans rien afficher.
"active" ou "inactive" :if) :man systemctl et chercher is-active.
L'option pour le silencieux est --quiet (ou -q).
NAME
systemctl - Control the systemd system and service manager
SYNOPSIS
systemctl [OPTIONS...] COMMAND [UNIT...]
COMMANDES sur les UNITES (services)
Etat (lecture, retournent un code de sortie)
is-active UNIT affiche "active"/"inactive" + code 0 si actif
is-enabled UNIT le service demarre-t-il au boot ?
is-failed UNIT est-il dans un etat failed ?
status UNIT affichage complet (statut + derniers logs)
Controle (modifient l'etat)
start UNIT demarre le service
stop UNIT arrete le service
restart UNIT redemarre
reload UNIT recharge la config sans redemarrer
Configuration du boot
enable UNIT configure pour demarrer au boot
disable UNIT retire du boot
mask UNIT empeche tout demarrage (lock)
Vue d'ensemble
list-units [--type=service] liste les unites
--failed liste seulement celles en echec
OPTIONS
--quiet, -q aucun affichage, juste le code de sortie
--no-pager pas de pagination automatique
--user agir sur l'instance utilisateur
CODES DE SORTIE (utile dans les scripts)
0 reussi / actif / enabled
3 inactif / disabled
autre erreur
EXEMPLES
# Test silencieux dans un script
if systemctl is-active --quiet ircd-hybrid; then
echo "OK"
fi
# Redemarrer si pas actif
systemctl is-active --quiet ircd-hybrid || systemctl restart ircd-hybrid
# Voir les services en echec
systemctl --failed
# Activer + demarrer au boot d'un coup
systemctl enable --now ircd-hybrid
# a) Affichage humain
systemctl is-active ircd-hybrid
# Sortie : "active" ou "inactive" + code 0 ou non-nul
# b) Silencieux, code de sortie uniquement
systemctl is-active --quiet ircd-hybrid
# Aucune sortie ; code 0 si actif, non-nul sinon
# Utilisation dans un if :
if ! systemctl is-active --quiet ircd-hybrid; then
echo "Service en panne, redemarrage..."
systemctl restart ircd-hybrid
fi
Variantes utiles :
systemctl is-enabled ircd-hybrid : le service est-il configure pour demarrer au boot ?systemctl is-failed ircd-hybrid : est-il dans un etat failed ?systemctl status ircd-hybrid : affichage complet (status, derniers logs)Question 2 / 6 verifier un port
irc.quebec-libre.net ? (sans envoyer de donnees)ss (remplace netstat) avec -tlnp pour TCP + listening + pas de DNS + processus.
Distant : nc -zv teste l'ouverture sans envoyer de donnees.
Service applicatif : curl ou wget.
# a) Local : qui ecoute (avec le PID + nom du processus) sudo ss -tlnp | grep :6667 # b) Distant : test d'ouverture (sans envoyer de donnees) nc -zv irc.quebec-libre.net 6667 # c) Service web : voir la reponse HTTP curl -I https://exemple.com/ curl -s --connect-timeout 5 https://exemple.com/ | head
3 couches a connaitre :
systemctl is-active / psss / nccurl / client dedieQuestion 3 / 6 compter dans un log
/var/log/ircd-hybrid.log contient les evenements
du service. Chaque ligne d'erreur contient le mot ERROR.
Donnez la commande qui compte le nombre de lignes contenant ERROR :
man grep. L'option pour "compter au lieu d'afficher" est tres courte (une lettre).
grep -c "ERROR" /var/log/ircd-hybrid.log
Variantes utiles :
grep -c : compte le nombre de lignes contenant le motifgrep -o "ERROR" ... | wc -l : compte le nombre d'occurrences (peut etre plusieurs par ligne)grep -i "error" : insensible a la cassegrep -E "ERROR|FATAL" : motifs alternatifs (regex etendue)Cas reel - filtrer par date :
# Compter les erreurs d'aujourd'hui (si le log commence par AAAA-MM-JJ) grep "$(date +%Y-%m-%d)" /var/log/ircd-hybrid.log | grep -c ERROR
Question 4 / 6 dernieres lignes
ERROR du log
(pour diagnostic rapide), sans afficher les milliers d'autres lignes.
Composez la commande avec un pipe :
grep et tail avec le symbole |
(pipe). tail -n 5 garde les 5 dernieres lignes.
grep "ERROR" /var/log/ircd-hybrid.log | tail -n 5 # Variante courte : tail -5
Pipeline a connaitre :
# Suivre les nouvelles erreurs en temps reel tail -f /var/log/ircd-hybrid.log | grep --line-buffered "ERROR" # Voir les erreurs des 10 dernieres minutes (si timestamps ISO) since=$(date -d "10 minutes ago" +%Y-%m-%dT%H:%M) awk -v since="$since" '$1 > since' /var/log/ircd-hybrid.log | grep ERROR # Toutes les erreurs UNIQUES (sans doublon) grep "ERROR" /var/log/ircd-hybrid.log | sort -u # Top 5 des messages d'erreur les plus frequents grep "ERROR" /var/log/ircd-hybrid.log | sort | uniq -c | sort -rn | head -5
Question 5 / 6 awk : extraire un champ
/var/log/ircd-hybrid.log a le format suivant
(3 champs separes par des espaces) :
a) Avec awk, extraire seulement la 2e colonne (LEVEL) :
b) Compter combien de chaque niveau (INFO, ERROR, WARN) : on prend la 2e colonne, on trie, on compte les doublons :
$1 = 1er champ, $2 = 2e, etc.
Pour compter les doublons : pipe vers sort puis uniq -c.
# a) Extraire la 2e colonne (LEVEL)
awk '{print $2}' /var/log/ircd-hybrid.log
# Sortie :
# INFO
# ERROR
# INFO
# WARN
# b) Compter les occurrences par niveau
awk '{print $2}' /var/log/ircd-hybrid.log | sort | uniq -c
# Sortie :
# 1 ERROR
# 2 INFO
# 1 WARN
Autres patterns awk a connaitre :
# Filtrer + extraire en une commande
awk '$2 == "ERROR" {print $3}' /var/log/ircd-hybrid.log
# = pour chaque ligne ou la 2e colonne est "ERROR", afficher la 3e
# Compter directement avec awk
awk '$2 == "ERROR" {erreurs++} END {print erreurs}' /var/log/ircd-hybrid.log
# Avec un separateur custom (ex. ":")
awk -F':' '{print $1}' /etc/passwd
# Plusieurs colonnes
awk '{print $1, $2}' fichier.log
Cousins utiles :
cut -d' ' -f2 : plus simple si separateur fixecut -d' ' -f1,3 : plusieurs champsQuestion 6 / 6 script complet
surveiller-ircd.sh qui :
systemctl is-active --quietssOK ou FAIL avec date dans /var/log/audit-ircd.logLOG=..., SERVICE=...),
verifications en couches successives avec if !, $(date '+%Y...')
pour l'horodatage, et >> pour ajouter au log d'audit.
NAME
systemctl - Control the systemd system and service manager
SYNOPSIS
systemctl [OPTIONS...] COMMAND [UNIT...]
COMMANDES sur les UNITES (services)
Etat (lecture, retournent un code de sortie)
is-active UNIT affiche "active"/"inactive" + code 0 si actif
is-enabled UNIT le service demarre-t-il au boot ?
is-failed UNIT est-il dans un etat failed ?
status UNIT affichage complet (statut + derniers logs)
Controle (modifient l'etat)
start UNIT demarre le service
stop UNIT arrete le service
restart UNIT redemarre
reload UNIT recharge la config sans redemarrer
Configuration du boot
enable UNIT configure pour demarrer au boot
disable UNIT retire du boot
mask UNIT empeche tout demarrage (lock)
Vue d'ensemble
list-units [--type=service] liste les unites
--failed liste seulement celles en echec
OPTIONS
--quiet, -q aucun affichage, juste le code de sortie
--no-pager pas de pagination automatique
--user agir sur l'instance utilisateur
CODES DE SORTIE (utile dans les scripts)
0 reussi / actif / enabled
3 inactif / disabled
autre erreur
EXEMPLES
# Test silencieux dans un script
if systemctl is-active --quiet ircd-hybrid; then
echo "OK"
fi
# Redemarrer si pas actif
systemctl is-active --quiet ircd-hybrid || systemctl restart ircd-hybrid
# Voir les services en echec
systemctl --failed
# Activer + demarrer au boot d'un coup
systemctl enable --now ircd-hybrid
#!/bin/bash
# surveiller-ircd.sh
SERVICE="ircd-hybrid"
PORT=6667
LOG_AUDIT="/var/log/audit-ircd.log"
LOG_SERVICE="/var/log/ircd-hybrid.log"
HORODATAGE=$(date '+%Y-%m-%d %H:%M:%S')
# Couche 1 : service actif ?
if ! systemctl is-active --quiet "$SERVICE"; then
echo "${HORODATAGE} FAIL service inactif" >> "$LOG_AUDIT"
exit 1
fi
# Couche 2 : port ouvert ?
if ! ss -tln | grep -q ":${PORT} "; then
echo "${HORODATAGE} FAIL port ${PORT} ferme" >> "$LOG_AUDIT"
exit 1
fi
# Couche 3 : trop d'erreurs ?
nbErreurs=$(grep -c "ERROR" "$LOG_SERVICE")
if [ "$nbErreurs" -gt 50 ]; then
echo "${HORODATAGE} WARN ${nbErreurs} erreurs dans le log" >> "$LOG_AUDIT"
exit 2
fi
# Tout va bien
echo "${HORODATAGE} OK service+port+log" >> "$LOG_AUDIT"
exit 0
Reflexes appliques :
exit 1) au premier echec pour ne pas masquer le diagnostic>>) avec horodatage standardiseBilan
R pour recommencer.