¿Dejar de enviar el correo cron para el script de copia de seguridad?


13

He configurado un script de copia de seguridad para hacer una copia de seguridad de los datos mundiales en mi servidor de Minecraft cada hora usando cron, pero debido a que los jugadores editan constantemente los mundos, tar me decía que los archivos cambiaban mientras se leían. Agregué --ignore-command-error al tar en el script y eso suprime cualquier error cuando lo ejecuto manualmente, sin embargo, cron todavía envía un mensaje de correo diciendo que los archivos se cambiaron mientras se leían, y termina inundando mi correo porque es corre una vez por hora. Alguien sabe cómo solucionar esto? Este es el guión:

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

Respuestas:


22

Cron intentará enviar un correo electrónico con cualquier resultado que pueda haber ocurrido cuando se ejecutó el comando. Desde la página de manual de cron:

Al ejecutar comandos, cualquier salida se envía por correo al propietario del crontab (o al usuario especificado en la variable de entorno MAILTO en el crontab, si existe). Cualquier salida de trabajo también se puede enviar a syslog mediante la opción -s.

Entonces, para deshabilitarlo para una entrada crontab específica, simplemente capture todos los resultados de los comandos y diríjalo a un archivo o a /dev/null.

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

1
D: usando mi ejemplo!
Braiam

@Braiam: lo siento, me sentía flojo y no tenía ganas de escribirlo. Hubiera escrito lo mismo de todos modos 8-).
slm

@Braiam, ¿eso es mejor? 8-).
slm

Funciona muy bien, exactamente lo que estaba buscando.
Carter

Tenga en cuenta que en mi CentOS 7, con crontabnot cron, -ssignifica selinux context.....
WesternGun

13

En lugar de canalizar todo a /dev/null(lo que puede dejarlo sin una idea de lo que sucedió si algo sale mal), puede canalizar sus scripts para registrar archivos como este:

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

Y para dejar de recibir correos, simplemente configure la MAILTOvariable en una cadena vacía al comienzo de su archivo crontab:

MAILTO=""

4

Si no desea correos para una tarea cron específica, simplemente puede agregar >/dev/null 2>&1al final de la línea:

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

Elijo de esta manera: perdiste la noción de todo, pero perfectamente.
WesternGun

0

Debe agregar lo siguiente a su comando gnu tar : --warning = no-file-changed

Eso suprimirá todos los mensajes " % s: el archivo cambió a medida que lo leemos ". Y al usar esta solución (y no redirigir todo a / dev / null), aún podrá obtener mensajes de error cuando las cosas realmente salgan mal.


Con el indicador --warning puede habilitar y deshabilitar muchos mensajes diferentes que imprimen alquitrán . Aquí está la parte relevante del manual con todas las palabras clave que puede usar: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Nota: al agregar " no- " delante de una palabra clave, el mensaje se suprimirá.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.