Minimizzare scritture su schede SD
Introduzione
Weewx scrive su disco per quanto segue:
- Immagini e file HTML vengono generati ad ogni intervallo di archiviazione;
- Messaggi nei file log di sistema;
- I dati meteorologici vengono salvati nel database SQLITE.
La maggior parte delle scritture è dovuta alla generazione di report. I report vengono scritti una volta per ogni intervallo di archiviazione - 5 minuti su una tipica installazione di Weewx. Per StandardReport ciò significa circa 600 KB di scritture per intervallo di archiviazione. Weewx scrive nel file di log di sistema almeno una volta per intervallo di archiviazione, il che equivale a circa 10 KB di scritture per intervallo di archiviazione. Le scritture minori si verificano ad ogni intervallo di archiviazione quando Weewx scrive nel database SQLITE.
Per eliminare le scritture, procedere come segue:
- Salvare i report in un file system temporaneo (tmpfs o ramdisk);
- Salvare i log di sistema in un file system temporaneo o in un server syslog remoto;
- Salvare i dati meteorologici su un server MYSQL remoto;
- Disabilitare l'uso dello SWAP.
Le seguenti istruzioni sono per distribuzioni Linux simili a Debian. Per altri sistemi operativi i dettagli di implementazione variano.
Salvare i report in un file system temporaneo
- Aggiungi una voce a fstab
echo "weewx_reports /var/weewx/reports tmpfs size=20M,noexec,nosuid,nodev 0 0" | sudo tee -a /etc/fstab
- Montare manualmente il nuovo file system
sudo mkdir -p /var/weewx/reports sudo mount -a
- Dì a Weewx di utilizzare il nuovo file system per i report
sudo sed -i -e 's%HTML_ROOT =.*%HTML_ROOT = /var/weewx/reports%' /home/weewx/weewx.conf
- Riavvia Weewx
sudo /etc/init.d/weewx stop sudo /etc/init.d/weewx start
- Indica al server Web dove trovare i rapporti
sudo ln -s /var/weewx/reports /var/www/html/weewx
Crea un file in /etc/apache2/sites-available denominato weewx.conf con il testo seguente:
Alias /weewx "/var/weewx/reports" <Directory "/var/weewx/reports"> Options Indexes Includes FollowSymLinks AllowOverride None Require all granted </Directory>
Quindi inserire quanto segue al terminale per abilitare il nuovo sito e riavviare il server web:
sudo a2ensite weewx sudo systemctl reload apache2
Salvare log su ramdisk
Disattiva il logging per iniziare:
sudo /etc/init.d/rsyslog stop
Modifica fstab per creare una posizione per i file di log e altri file di runtime, regolando le dimensioni secondo le necessità (le posizioni non dimensionate in modo specifico condivideranno la memoria disponibile):
# /run, /var/run, /run/lock, /var/run/lock will be automatically created by default - tmpfs tmpfs /tmp tmpfs defaults,noatime,nodev,nosuid,noexec,mode=0755,size=10M 0 0 tmpfs /var/tmp tmpfs defaults,noatime,nodev,nosuid,noexec,mode=0755,size=2M 0 0 tmpfs /var/lock tmpfs defaults,noatime,nodev,nosuid,noexec,mode=0755 0 0 weewx_reports /var/weewx/reports tmpfs defaults,nodev,nosuid,mode=0755,size=5M 0 0 tmpfs /var/log tmpfs defaults,noatime,nodev,nosuid,noexec,mode=0755 0 0
Utilizzare il parametro noatime per i file system EXT4.
Facoltativo: rimuovere il log esistente e l'archiviazione temporanea (in alternativa, eliminare i contenuti per liberare spazio di archiviazione):
sudo rm -Rf /tmp/* sudo rm -Rf /var/log/* sudo rm /var/tmp/*
Monta il nuovo spazio di archiviazione e riprendi il logging:
sudo mount -a sudo /etc/init.d/rsyslog start
Il server web Apache non funzionerà fino a quando l'archiviazione temporanea per i registri Apache non verrà ricreata in memoria. Crea un file di script bash denominato initalize-apache-logs con il seguente contenuto:
#!/bin/bash sudo mkdir /var/log/apache2 sudo /etc/init.d/apache2 restart
Rendilo un file eseguibile:
sudo chmod +x initalize-apache-logs
Infine, assicurati che venga eseguito ogni volta che il sistema viene avviato:
sudo crontab -e
Aggiungi questa riga alla fine:
@reboot /path/initialize-apache-logs
dove path è /home/pi/scripts o simile.
Successivamente, regola il controllo del logging tramite rsyslog. Weewx reindirizza già i log a un file dedicato: /etc/weewx/rsyslog.d/weewx.conf utilizzando un file rsyslog di configurazione. È possibile modificarlo ma non dovrebbe essere necessario:
:programname,isequal,"weewx" /var/log/weewx/weewx.log :programname,isequal,"weewx" ~ :programname,startswith,"wee_" /var/log/weewx/weewx.log :programname,startswith,"wee_" ~
Questo raccoglie i log da weewx e dai programmi che iniziano con "wee_" come wee_device. Il file viene archiviato in una posizione e utilizzato in un'altra. Per attivarlo e riavviare il logging utilizzandolo:
sudo ln -sf /etc/weewx/rsyslog.d/weewx.conf /etc/rsyslog.d sudo /etc/init.d/rsyslog restart
Infine, una regolazione analoga è necessaria per un'altra configurazione che regola il tempo di conservazione dei file di log e altri parametri. Weewx include un file di configurazione logrotate predefinito per questo: /etc/weewx/logrotate.d/weewx.
Dovrebbe contenere:
/var/log/weewx.log { weekly missingok rotate 52 compress delaycompress notifempty # on some older systems the permissions do not propagate, so force them # debian uses root:adm # create 644 root adm # ubuntu uses syslog:adm # create 644 syslog adm # on some older systems rsyslog must be restarted to send output to right file # sharedscripts # postrotate # standard way of invoking rc scripts # /etc/init.d/rsyslog stop # /etc/init.d/rsyslog start # on some systems a reload will work # /etc/init.d/rsyslog reload > /dev/null # some ubuntu systems use upstart # service rsyslog restart > /dev/null # some redhat/fedora systems have their own way # reload rsyslog > /dev/null 2>&1 # some debian systems do it this way # invoke-rc.d rsyslog reload > /dev/null endscript
È possibile trovare informazioni su possibili modifiche alla configurazione qui. Per attivarlo e riavviare il logging utilizzando queste impostazioni:
sudo ln -sf /etc/weewx/logrotate.d/weewx /etc/logrotate.d sudo /etc/init.d/rsyslog restart
Entrambi questi file di configurazione devono avere i permessi 644. Se necessario:
sudo chmod 644 weewx
Salvare log su server syslog remoto
- Configurare un computer, ad esempio loghost.example.com, per ricevere i file di log. Modifica /etc/rsyslog.conf con qualcosa del genere:
$ModLoad imuxsock $ModLoad imklog $ModLoad imudp $UDPServerRun 514 $template FILENAME,"/var/log/%fromhost-ip%/syslog.log" *.* ?FILENAME
- Riavvia il demone rsyslog sul server di destinazione
sudo /etc/init.d/rsyslog stop sudo /etc/init.d/rsyslog start
- Configura il computer Weewx per inviare file di log. Modifica /etc/rsyslog.conf con questo:
*.* @loghost.example.com
Funzionerà ma è considerato obsoleto. Puoi tagliare, incollare e modificare da quanto segue (il resto è in gran parte standard nelle distribuzioni Linux):
# this is the simplest forwarding action: *.* action(type="omfwd" target="192.168.1.X" port="514" protocol="tcp") # it is equivalent to the following obsolete legacy format line: *.* @@192.168.1.X:514 # do NOT use this any longer! # Note: if the remote system is unreachable, processing will # block here and discard messages after a while # so a better use is *.* action(type="omfwd" target="192.168.1.X" port="514" protocol="tcp" action.resumeRetryCount="100" queue.type="linkedList" queue.size="10000") # this will de-couple the sending from the other logging actions, # and prevent delays when the remote system is not reachable. Also, # it will try to connect 100 times before it discards messages as # undeliverable.
- Riavvia il demone rsyslog sul computer Weewx
sudo /etc/init.d/rsyslog stop sudo /etc/init.d/rsyslog start
Per i dettagli, vedere la documentazione di rsyslog:
http://www.rsyslog.com/sending-messages-to-a-remote-syslog-server/
Disattivare swap
Eseguire in un terminale il seguente comando:
sudo dphys-swapfile swapoff