Per qualche strana ragione, non sono in grado di salvare un backup mysql generato tramite mysqldump su un'unità di rete afp come processo cron. Se chiamo lo script della shell come utente root (accesso tramite sudo su nel terminale), funziona perfettamente. Quindi, lo script è ok. Deve avere qualcosa a che fare con il cron job stesso.
Per fare ciò, ho modificato il crontab di root usando crontab -e in questo modo:
10 12 * * 1-5 sh /var/root/cronjobs/mysql_backup.workdaily.sh
Questo dice al demone crontab di eseguirlo ogni giorno lavorativo (dal lunedì al venerdì) alle 12.10 PM.
Con la stessa chiamata dal terminale funziona (come descritto sopra).
Questo è lo script di shell che sto usando per farlo:
#!/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")
Il processo cron crea un file sull'unità di rete con una dimensione del file di 20 byte. Se lo sparo, è vuoto. Normalmente il database ha circa 12 MB. Quindi, qualcosa non va qui.
Questo script viene eseguito tramite il cron job in ora di pranzo, quindi nessuno usa il MacBook in questo momento (lo schermo è bloccato con un utente connesso). Standby è completamente disabilitato (solo lo schermo in standby è attivo dopo 10 minuti).
Qualcuno sa perché questo non funziona? Qualsiasi aiuto o suggerimento sarebbe fantastico.