Como seu objetivo é "sincronizar uma pasta local com a pasta ftp com um rsync crontab", sugiro que você escreva um pequeno script que monte o FTP, rsync, desmonte o FTP. Em seguida, execute este script no crontab.
Deve ser algo assim:
#!/bin/bash
curlftpfs user:pwd@myhost:port/folder/ /mnt/mymountfolder
#might need sleep 1 here
rsync -a /mnt/mymountfolder /local/folder
fusermount -uz /mnt/mymountfolder
Verifique se você chmod + x no script.
crontab -e
#m h d M wd
0 * * * * /usr/local/bin/backup-script
Além disso, se você realmente quiser a pasta FTP montada o tempo todo, você pode criar um script que monte / desmonte sua unidade. Se você também adicioná-lo ao fstab, poderá montar manualmente a unidade.
fstab:
curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder fuse noauto,user,uid=1000,gid=1000,umask=0022 0 0
network-mount.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
Adicione isto ao crontab (crontab -e):
* * * * * /usr/local/bin/network-mount.sh
Tenha cuidado também para que o seu rsync não seja concluído antes da próxima execução. Isso pode ser feito automaticamente (verifique se o rsync está sendo executado) ou com base na quantidade de dados que precisam estar em sincronia (quantidade de tempo que o rsync demora, no pior cenário).
Supondo que você não execute o rsync para mais nada, verificar se ele está sendo executado pode ser feito assim:
pgrep rsync
if [ $? == 0 ]; then
# rsync running
exit
else
# rsync not running
#do stuff
fi