Fichier de log tournant dans Domoticz

log_file_domoticzJe 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….

8 réflexions sur « Fichier de log tournant dans Domoticz »

  1. Ping : [RPi] Comment ajouter un RAMDisk

  2. faipassa

    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 ?

    Répondre
    1. Manu Auteur de l’article

      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 !

      Répondre
  3. dudune

    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.

    Répondre
  4. calouis

    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`

    Répondre
  5. Estyaah

    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.

    Répondre
  6. Hugues

    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`

    Répondre

Répondre à dudune Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.