Interrompere cron invio di posta per lo script di backup?


13

Ho impostato uno script di backup per eseguire il backup dei dati del mondo sul mio server Minecraft ogni ora usando cron, ma poiché i mondi sono costantemente modificati dai giocatori, tar mi ha detto che i file sono cambiati mentre venivano letti. Ho aggiunto --ignore-command-error al tar nello script e questo elimina eventuali errori quando lo eseguo manualmente, tuttavia cron invia comunque un messaggio di posta elettronica che dice che i file sono stati modificati durante la lettura e finisce per inondare la mia posta perché è correre una volta ogni ora. Qualcuno sa come risolvere questo? Questo è lo script:

filename=$(date +%Y-%m-%d)
cd /home/minecraft/Server/
for world in survival survival_nether survival_the_end creative superflat
do
if [ ! -d "/home/minecraft/backups/$world" ]; then
mkdir /home/minecraft/backups/$world
fi
find /home/minecraft/backups/$world -mtime +1 -delete
tar --ignore-command-error -c $world/ | nice -n 10 pigz -9 > /home/minecraft/backups/$world/$filename.tar.gz
done

Risposte:


22

Cron tenterà di inviare un'e-mail con qualsiasi output che potrebbe essersi verificato durante l'esecuzione del comando. Dalla pagina man di cron:

Quando si eseguono comandi, qualsiasi output viene inviato al proprietario del crontab (o all'utente specificato nella variabile d'ambiente MAILTO nel crontab, se esiste). Qualsiasi output di lavoro può anche essere inviato a syslog usando l'opzione -s.

Quindi per disabilitarlo per una specifica voce crontab basta catturare tutti i comandi di output e indirizzarli su un file o su /dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1

1
D: usando il mio esempio!
Braiam,

@Braiam - scusa se mi sentivo pigro e non mi andava di scriverlo. Avrei digitato la stessa cosa comunque Cool.
slm

@Braiam - è meglio? 8-).
slm

Funziona alla grande, esattamente quello che stavo cercando.
Carter,

Si noti che nel mio CentOS 7, crontabsenza cron, -ssignifica selinux context.....
WesternGun

13

Invece di reindirizzare tutto /dev/null(il che potrebbe lasciarti senza la minima idea di cosa è successo se qualcosa va storto), puoi reindirizzare i tuoi script per registrare i file in questo modo:

30 * * * * backup.sh > ~/logs/backup.log

E per interrompere la ricezione di posta, basta impostare la MAILTOvariabile su una stringa vuota all'inizio del file crontab:

MAILTO=""

4

Se non vuoi posta per un'attività cron specifica, puoi semplicemente aggiungere >/dev/null 2>&1alla fine della riga:

30 * * * * backup.sh >/dev/null 2>&1

Scelgo così: hai perso traccia di tutto, ma in modo ordinato.
WesternGun

0

Dovresti aggiungere quanto segue al tuo comando gnu tar : --warning = no-file-changed

Ciò eliminerà tutti i messaggi " % s: file modificato durante la lettura ". E usando questa soluzione (e non reindirizzando tutto su / dev / null), sarai comunque in grado di ricevere messaggi di errore quando le cose vanno davvero male.


Con il --warning bandiera è possibile attivare e disattivare un sacco di diversi messaggi che catrame stampe. Ecco la parte pertinente del manuale con tutte le parole chiave che è possibile utilizzare: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Nota: aggiungendo " no- " davanti a una parola chiave, il messaggio verrà soppresso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.