journal-cron.sh
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 Orange Pi 5 Plus (Rockchip RK3588, 4 Cortex-A76 + 4 Cortex-A55, jusqu'à 16 Go de RAM) sous Armbian/Debian, connecteur GPIO 40 broches et double Ethernet gigabit. 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
Gravez Armbian pour RK3588, puis sudo apt install python3-gpiod gpiod. Identifiez la puce avec gpiodetect et les broches avec gpioinfo, adaptez le script et lancez-le (python3 ou ./script.sh).
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