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.
Bonjour,
Tres interessant. Un grand merci. J’ai modifié le script pour faire la même chose avec le log de OZW en créant un lien depuis sa localisation initiale dans domoticz/Config
ls -al ../domoticz/Config/*.txt
lrwxrwxrwx 1 pi pi 20 jun 27 07:31 ../domoticz/Config/OZW_Log.txt -> /tmp/log/OZW_Log.txt
Voici le script si cela interesse quelqu’un
#!/bin/sh
#
# Simple cleanup and rotate logs script for domoticz
# Ref : http://domotique.web2diz.net/?p=577
#
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 « cp /home/pi/domoticz/Config/OZW_Log.txt /home/pi/domoticz/logs/OZW_Log.txt.$DATE_FORMAT »
sudo cp /home/pi/domoticz/Config/OZW_Log.txt /home/pi/domoticz/logs/OZW_Log.txt.$DATE_FORMAT
echo « cleanup log /home/pi/domoticz/Config/OZW_Log.txt »
sudo chmod 777 /home/pi/domoticz/Config/OZW_Log.txt
echo « ############### RESTART LOGS `date` ############### » > /home/pi/domoticz/Config/OZW_Log.txt
echo « ############### Ends Script ############### » `date`