Script ftp: salvataggio schedulato file di log

L’obiettivo degli script è quello di salvare via ftp in un log-server i file di log prodotti dal sistema locale, con operazione schedulata tramite job crontab.
Nel mio caso si trattava di salvare i file di log di un mail server postfix.
Modificando il logrotate del sistema ho ottenuto il salvataggio quotidiano del file mail.log del giorno precedente nella directory /var/log/ToUpload.
La modifica del logrotate ha riguardato il file di configurazione /etc/logrotate.d/rsyslog e ha implicato l’aggiunta della seguente sezione alla fine del file:

...
/var/log/mail.log
{
 rotate 30
 daily
 missingok
 notifempty
 delaycompress
 compress
 postrotate
 cp /var/log/mail.log.1 /var/log/ToUpload/mail.log_$(date +%F.txt); invoke-rc.d rsyslog reload > /dev/null
 endscript
}

Come si intuisce facilmente, il file /var/log/mail.log viene copiato in /var/log/ToUpload/ e rinominato con timestamp. L’operazione avviene dopo la rotazione del file (come si evince dall’istruzione “postrotate”).
Successivamente questo file viene inviato via ftp al LOG SERVER e cancellato localmente solo se l’invio è andato a buon fine.

I file e gli script risiedono nella medesima directory (in /var/log/ToUpload nel mio caso).

Il file UploadAndDelete.sh richiamerà Upload.sh e poi Delete.sh.

Script UploadAndDelete.sh:

#!/bin/bash
echo inizio upload dei file di log sul LOG SERVER
./Upload.sh
echo file uplodati e lista uploaded.list creata
sleep 2
echo ora cancello i file uplodati con successo
./Delete.sh
exit

Script Upload.sh:

#!/bin/bash
HOST=<ip_server_ftp> # Indirizzo dell'ftp server FTP server (LOG SERVER)
USER=<username> # userid utente ftp 
PASS=<password> # password utente ftp
# ci spostiamo sulla directory che contiene i file da uplodare e lo script stesso
cd /var/log/ToUpload/
# inizio sessione ftp
ftp -inv $HOST << EOF 
user $USER $PASS
mput *.txt
ls /*.txt /var/log/ToUpload/uploaded.list
bye 
EOF

Script delete.sh

#!/bin/bash
# utilizzando la lista dei file già uplodati 
# cancelliamo i corrispondenti file locali
# in pratica procediamo alla cancellazione solo se 
# siamo certi che l'upload abbia avuto esito positivo
echo cancello i file locali correttamente caricati sul LOG SERVER
# confronto uploaded e e file locali in /var/log/toupload
# se uploaded contiene il file contenuto anche in /var/log/toupload
# allora lo cancello da /var/log/toupload
cd /var/log/ToUpload/
for i in $(cat uploaded.list | awk '{ print $9 }'); do
if [ -f $i ];
then
echo rimuovo $i
rm $i
echo done
else
echo file $i precedentemente cancellato
fi
done
echo file locali cancellati
sleep 1
echo fatto! esco
exit 0

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>