Por alguna extraña razón, no puedo guardar una copia de seguridad generada de mysql a través de mysqldump en una unidad de red afp como un trabajo cron. Si llamo al script de shell como usuario root (inicio de sesión a través de sudo su en terminal), funciona perfectamente. Por lo tanto, el guión está bien. Debe tener algo que ver con el trabajo cron.
Para hacerlo, edité el crontab de la raíz usando crontab -e así:
10 12 * * 1-5 sh /var/root/cronjobs/mysql_backup.workdaily.sh
Esto le dice al demonio crontab que lo ejecute todos los días laborables (de lunes a viernes) a las 12.10 p.m.
Con la misma llamada desde el terminal funciona (como se describe anteriormente).
Este es el script de shell que estoy usando para hacerlo:
#!/usr/bin/env sh
LOCALMOUNTPOINT="/Volumes/MyDrive"
# check if network drive is mounted
if mount | grep "on $LOCALMOUNTPOINT" > /dev/null; then
echo "mounted"
else
# not needed the below check, but much more safer in cron job execution:
if ls -lha /Volumes | grep "$LOCALMOUNTPOINT" > /dev/null; then
mount -t afp "afp://username:password@NETWORKDRIVE%28AFP%29._afpovertcp._tcp.local/Subfolder" /Volumes/MyDrive
else
mkdir /Volumes/MyDrive && mount -t afp "afp://username:password@NETWORKDRIVE%28AFP%29._afpovertcp._tcp.local/Subfolder" /Volumes/MyDrive
fi
fi
mysqldump -u root -ppassword --all-databases | gzip -c > $(date "+/Volumes/MyDrive/Dumps/mysql/username/full__%FT%H_%M_%S.sql.gz")
El trabajo cron crea un archivo en la unidad de red con un tamaño de archivo de 20 bytes. Si lo tiro, está vacío. Normalmente la base de datos tiene unos 12 MB. Entonces, algo está mal aquí.
Este script se ejecuta a través del trabajo cron en la hora del almuerzo, por lo que nadie usa el MacBook en este momento (la pantalla está bloqueada con un usuario registrado). El modo de espera está completamente deshabilitado (solo el modo de espera de la pantalla está activo después de 10 minutos).
¿Alguien sabe por qué esto no funciona? Cualquier ayuda o sugerencia sería genial.