Te doy la bienvenida a nuestra web, en este sitio hallarás la resolución a lo que necesitas.
Solución:
Como su objetivo es “sincronizar una carpeta local con la carpeta ftp con crontab rsync”, le sugiero que escriba un pequeño script que monte el FTP, rsync, desmonte el FTP. Luego ejecute este script desde crontab.
Debería ser algo como esto:
#!/bin/bash
curlftpfs user:[email protected]:port/folder/ /mnt/mymountfolder
#might need sleep 1 here
rsync -a /mnt/mymountfolder /local/folder
fusermount -uz /mnt/mymountfolder
Asegúrese de hacer chmod +x en el script.
crontab -e
#m h d M wd
0 * * * * /usr/local/bin/backup-script
Además, si realmente desea que la carpeta FTP esté montada todo el tiempo, puede crear un script que monte/desmonte su disco. Si también lo agrega a fstab, puede montar manualmente la unidad.
fstab:
curlftpfs#user:[email protected]:port/folder/ /mnt/mymountfolder fuse noauto,user,uid=1000,gid=1000,umask=0022 0 0
montaje en red.sh:
#!/bin/bash
folder=/media/ftp
# check if host is alive
ping=`/usr/bin/fping -q host.dyn.org`
if [ $? == 0 ]; then
# check if folder is mounted
mountpoint $folder > /dev/null
if [ $? != 0 ]
# mount, timeout in case something goes wrong
then timeout 10s mount $folder
fi
else
mountpoint $folder > /dev/null
if [ $? = 0 ]
#unmount lazy (network down)
then umount -l $folder
fi
fi
Agregue esto a crontab (crontab -e):
* * * * * /usr/local/bin/network-mount.sh
También tenga cuidado de que su rsync no se complete antes de que se ejecute el siguiente. Esto podría hacerse automáticamente (compruebe si rsync se está ejecutando), o en función de la cantidad de datos que deben estar sincronizados (cantidad de tiempo que tarda rsync, en el peor de los casos).
Suponiendo que no ejecute rsync para nada más, verificar si se está ejecutando podría hacerse de esta manera:
pgrep rsync
if [ $? == 0 ]; then
# rsync running
exit
else
# rsync not running
#do stuff
fi
Puedes añadir valor a nuestra información contribuyendo tu veteranía en los informes.