Je souhaitais me laisser la possibilités d’avoir accès aux logs de domoticz jusqu’à une semaine en arrière, et dans le but de réduire au maximum les accès lecture/écriture sur ma carte SD mon fichier de log de domoticz se trouve dans /tmp qui lui même est uniquement stocké en RAM. De ce fait il n’y a pas un accès permanent en écriture sur ma carte SD dû à ce fichier. Pour éviter que mon répertoire /tmp ne grossisse trop, j’ai créé un petit script qui permet de sauvegarder quotidiennement les logs domoticz dans une répertoire de sauvegarde.
Voici comment procéder :
- modifier le point de montage /tmp pour qu’il soit uniquement géré en RAM
- spécifier à domoticz que l’on veux que les logs s’écrivent dans /tmp
- ajouter un script qui quotidiennement va sauvegarder le fichier de log.
Etape 1 : définir le point de montage /tmp en ram au lieu de disque
Pour éviter de trop solliciter la carte SD et donc à terme la détériorer, nous allons utiliser un « bout » de ram comme espace de stockage temporaire. Attention : cela à comme conséquence de vider le contenu de ce répertoire à chaque redémarrage.
Le fichier /etc/fstab permet de définir les points de montage, dans un premier temps, sauvegardez la configuration actuelle :
sudo cp -p /etc/fstab /etc/fstab.save
puis éditez le fichier /etc/fstab et ajoutez la ligne suivante :
tmpfs /tmp tmpfs nodev,nosuid,size=20M 0 0
Notez que dans ma config j’utilise 2OM ce qui est tout à fait suffisant. Vous pouvez ajuster en fonction de vos besoin dans la limite de la ram disponible.
Supprimer les éventuels fichiers présents dans le répertoire /tmp (sauvegardez-les si vous pensez en avoir besoin) puis redémarrer le Raspberry.
En faisant un df vous devriez maintenant voir que le répertoire /tmp à un stockage définit de 20M (dernière ligne ):
# df -hP Filesystem Size Used Avail Use% Mounted on /dev/root 5.6G 3.9G 1.5G 73% / devtmpfs 214M 0 214M 0% /dev tmpfs 44M 260K 44M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 87M 0 87M 0% /run/shm /dev/mmcblk0p5 60M 20M 40M 33% /boot tmpfs 20M 0M 20M 3% /tmp
Etape 2 : configurer le fichier de log domoticz
pour cela éditez simplement le fichier : « /etc/init.d/domoticz.sh »
en ajoutant l’argument « -log /tmp/domoticz.log »
Pour ma part cela donne la ligne :
DAEMON_ARGS="-daemon -www 8080 -log /tmp/domoticz.log"
Puis redémarrer domoticz.
vous pouvez vérifier que le changement a bien été pris en compte en faisant un tail -f sur le fichier :
root@raspberrypi:~# tail -f /tmp/domoticz.log 2016-03-07 14:24:39.509 (EDF) P1 Smart Meter (Conso EDF) 2016-03-07 14:24:47.160 (RFXCOM) Temp + Humidity (Cuisine) 2016-03-07 14:24:50.888 (EDF) P1 Smart Meter (Conso EDF) 2016-03-07 14:24:54.907 Hardware Monitor: Fetching data (System sensors) 2016-03-07 14:25:02.268 (EDF) P1 Smart Meter (Conso EDF)
Etape 3 : script de log tournant domoticz
Pour éviter que le répertoire /tmp ne se remplisse trop avec les logs de domoticz on va utiliser un script qui va sauvegarder journellement les fichiers de log de domoticz et remettre la taille a zéro dans le fichier initial /tmp/domoticz.log.
Commencez par créer le répertoire de sauvegarde des logs :
sudo mkdir /home/pi/domoticz/logs sudo mkdir /home/pi/scripts
Le second répertoire « scripts » est le répertoire dans lequel je mets tous mes scripts domoticz, vous pouvez l’appeler comme vous voulez …
mkdir /home/pi/scripts cd /home/pi/scripts curl -O https://raw.githubusercontent.com/Sirus10/domoticz/master/clean_logs.sh chmod +x clean_logs.sh
Pour que tous les fichiers de logs des derniers 7 jours soient disponibles dans le même repertoire, créé un lien pointant ver le fichier dans tmp :
ln -s /tmp/domoticz.log /home/pi/domoticz/logs/domoticz.log
Cela permet par exemple de faire une recherche dans l’ensemble des fichier des 7 derniers jours. Ensuite vous pouvez manuellement tester le script :
/home/pi/scripts/clean_logs.sh ############### Start Script ############### Mon 7 Mar 14:35:11 CET 2016 cp /home/pi/domoticz/logs/domoticz.log /home/pi/domoticz/logs/domoticz.log.1 cleanup log /home/pi/domoticz/logs/domoticz.log ############### Ends Script ############### Mon 7 Mar 14:35:12 CET 2016
Puis une fois que vous avez vus que tout est ok le planifier en cron tous les jours à minuit :
# cleanup domoticz logs 0 0 * * * /home/pi/scripts/clean_logs.sh > /tmp/clean_logs.log
Au bous de quelques jour vous aurez 7 fichiers de log en plus de votre log actuels (qui elle reste dans /tmp)
1 = Lundi, 2 = Mardi …
ls -l /home/pi/domoticz/logs domoticz.log.1 domoticz.log.2 domoticz.log.3 domoticz.log.4 domoticz.log.5 domoticz.log.6 domoticz.log.7
Voila c’est fini ! Pour ma part ce script fonctionne depuis au plus d’un an sans problème….
Ping : [RPi] Comment ajouter un RAMDisk
Hello,
Merci pour ces explications très instructives. Cependant, il me semble qu’il y a une légère erreur dans le script « clean_logs.sh » car au lieu de prendre le fichier log courant depuis /tmp (comme configuré dans l’étape 2) il le prend depuis /domoticz/log, là où ils devrait plutot stocker les copies de sauvegarde.
non ?
Bonjour faipassa,
exact ! j’ai oublié de précisé qu’il faut faire un lien dans le répertoire logs pointant vers le fichier que se trouve dans tmp:
ln -s /tmp/domoticz.log /home/pi/domoticz/logs/domoticz.log
Cela permet par exemple de faire des recherche dans tous les fichier en une seule commande.
J’ai ajusté le tutoriel pour ajouter cette information.
Merci encore !
Bonjour, et merci ca marche impec, il y a une coquille cependant dans le code ci-dessus
(dans l’etape 3)
mkdir /mome/pi/scripts
cd /mome/pi/scripts
au lieu de
mkdir /home/pi/scripts
cd /home/pi/scripts
de plus le « mkdir /home/pi/scripts » est deja créé via la commande precedente.
Thank you very much, this will help me with my growing logs. 🙂
Bonsoir
je ne vois pas où est l’erreur…Pouvez-vous m’aider? je suis pas spécialiste en programmation…
i@p3_jes:~/domoticz/scripts/sh $ ./clean_logs.sh
############### Start Script ############### jeudi 15 mars 2018, 19:05:24 (UTC+0100)
cp /home/pi/domoticz/logs/domoticz.log /home/pi/domoticz/logs/domoticz.log.4
cleanup log /home/pi/domoticz/logs/domoticz.log
chmod: impossible d’accéder à « /tmp/domoticz.log\r »: Aucun fichier ou dossier de ce type
: Permission non accordée: /home/pi/domoticz/logs/domoticz.log
############### Ends Script ############### jeudi 15 mars 2018, 19:05:24 (UTC+0100)
mon clean_logs.sh :
DATE_FORMAT=`date +%u`
echo « ############### Start Script ############### » `date`
echo « cp /home/pi/domoticz/logs/domoticz.log /home/pi/domoticz/logs/domoticz.log.$DATE_FORMAT »
sudo cp /home/pi/domoticz/logs/domoticz.log /home/pi/domoticz/logs/domoticz.log.$DATE_FORMAT
echo « cleanup log /home/pi/domoticz/logs/domoticz.log »
sudo chmod 777 /home/pi/domoticz/logs/domoticz.log
echo « ############### RESTART LOGS `date` ############### » > /home/pi/domoticz/logs/domoticz.log
echo « ############### Ends Script ############### » `date`
Salut @calouis,
Vérifie que dans « /etc/init.d/domoticz.sh » tu as bien une ligne non commentée (c’est à dire sans « # » devant) avec DAEMON_ARGS= »-daemon -www 8080 -log /tmp/domoticz.log »
C’est le -log /tmp/domoticz.log qui est important ici et qui manque sans doute. C’est pour cela que ton script de nettoyage ne le trouve pas.