journal-cron.sh

Raspberry Pi Zero W (2017) — Fiche carte · Fichier : journal-cron.sh · Langage : Bash · Usage : Journaliser une mesure toutes les minutes avec cron

Le binôme cron + script court est l'automate universel de Linux : chaque minute, charge CPU et température sont ajoutées à un CSV avec rotation intégrée. Zéro dépendance, zéro démon, redémarre tout seul après un reboot.

Matériel requis

Un Raspberry Pi Zero W (BCM2835, 512 Mo) sous Raspberry Pi OS, avec Wi-Fi 2,4 GHz et Bluetooth. Aucun : mesures internes à la carte.

Câblage

Aucun câblage. Vérifier que cron (ou cronie) est installé et démarré sur l'distribution utilisée.

Fonctionnement

cron exécute le script à heure fixe ; le script lit /proc et sysfs, append une ligne CSV puis tronque le fichier au-delà de 100 000 lignes pour borner le stockage.

Exécution

Copier le script (scp), chmod +x, lancer. Raspberry Pi OS recent : les acces GPIO se font sans sudo (groupe gpio).

Variantes

Pousser le CSV vers un serveur (curl -T), ou remplacer cron par un timer systemd (OnUnitActiveSec=60) pour le journalctl intégré.

journal-cron.sh

#!/bin/bash
# Mesure ponctuelle appelee par cron (ici toutes les minutes).
# Installation :
#   sudo cp journal-cron.sh /usr/local/bin/mesure-cart.sh
#   sudo chmod +x /usr/local/bin/mesure-cart.sh
#   (crontab -e) puis :  * * * * * /usr/local/bin/mesure-cart.sh

JOURNAL="/var/log/mesure-cart.csv"
[ -f "$JOURNAL" ] || echo "horodatage,charge,temp_c" > "$JOURNAL"

# 1) Charge moyenne (1 minute) depuis /proc/loadavg
CHARGE=$(awk '{print $1}' /proc/loadavg)

# 2) Temperature SoC (tolere l'absence du capteur)
TEMP="NA"
for z in /sys/class/thermal/thermal_zone*/temp; do
  [ -r "$z" ] && TEMP=$(( $(cat "$z") / 1000 )) && break
done

# 3) Ligne CSV horodatee, append atomique
echo "$(date -Is),$CHARGE,$TEMP" >> "$JOURNAL"

# 4) Rotation maison : garder ~100 000 lignes (~70 jours a la minute)
if [ "$(wc -l < "$JOURNAL")" -gt 100000 ]; then
  tail -n 50000 "$JOURNAL" > "$JOURNAL.tmp" && mv "$JOURNAL.tmp" "$JOURNAL"
fi

← Retour à la fiche