journal-cron.sh

BeagleBone AI-64 (TI TDA4VM / J721E) · 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

Une BeagleBone AI-64 (TI J721E, 2 GHz) sur image Debian officielle, alimentée en 5 V/4 A par USB-C, avec ses deux connecteurs cape P8/P9 en 3,3 V. Aucun : mesures internes à la carte.

Branchement

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. Sous Debian : sudo apt install gpiod python3-gpiod ; gpiodetect identifie les chips (le chip principal est 600000.gpio). Les broches P8/P9 sont nommées dans gpioinfo.

Pour aller plus loin

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