Portál AbcLinuxu, 3. prosince 2025 23:56
Pro synchronizaci FTP (namountováno přes curlftpfs) na můj domácí disk spouštím skript s rsync.
Pokud tento skript spustím "ručně" z terminálu, tak synchronizace složek trvá cca 30-40 minut, ale když ho spustím pomocí cronu, tak běží hodiny a konec se neblíží.Původně jsem zkoušel synchronizovat celý FTP do složky, po této zkušenosti jsem skript zkusil předělat na postupnou synchronizaci jednotlivých adresářů na FTP do jednotlivých podsložek na mém disku, ale výsledek - rychlost je stejná.
Kde by mohla být chyba?Skript:
#!/bin/bash
SOURCEFOLDER='/mnt/ftp_xyz_cz'
TARGETFOLDER='/home/karel/Backup/ftp'
ZACATEK=$(date)
if mountpoint -q /mnt/ftp_xyz_cz; then
echo "FTP is mounted" > /home/karel/Backup/rsync_ftp.log
find $SOURCEFOLDER/backup/*.jpa -mtime +30 -exec rm {} \;
find $SOURCEFOLDER/backup/*.sql.gz -mtime +10 -exec rm {} \;
for i in `ls -1 $SOURCEFOLDER`; do
if ls $TARGETFOLDER/$i >/dev/null; then
ZAC=$(date)
echo -e "\n\n==========================================================" >> /home/karel/Backup/rsync_ftp.log
echo "Synchronizuji adresář: "$TARGETFOLDER/$i >> /home/karel/Backup/rsync_ftp.log
echo "==========================================================" >> /home/karel/Backup/rsync_ftp.log
rsync -vhrtlz --exclude-from=/usr/local/bin/rsync_ftp_exclude.txt --delete $SOURCEFOLDER/$i/ $TARGETFOLDER/$i/ >> /home/karel/Backup/rsync_ftp.log
KON=$(date)
echo -e "\nZačátek v:\t$ZAC\nKonec v:\t"$KON >> /home/karel/Backup/rsync_ftp.log
else
echo "Vytvarim adresar: "$TARGETFOLDER/$i >> /home/karel/Backup/rsync_ftp.log
mkdir $TARGETFOLDER/$i >> /home/karel/Backup/rsync_ftp.log
ZAC=$(date)
echo -e "\n\n==========================================================" >> /home/karel/Backup/rsync_ftp.log
echo "Synchronizuji adresář: "$TARGETFOLDER/$i >> /home/karel/Backup/rsync_ftp.log
echo "==========================================================" >> /home/karel/Backup/rsync_ftp.log
rsync -vhrtlz --exclude-from=/usr/local/bin/rsync_ftp_exclude.txt --delete $SOURCEFOLDER/$i/ $TARGETFOLDER/$i/ >> /home/karel/Backup/rsync_ftp.log
KON=$(date)
echo -e "\nZačátek v:\t$ZAC\nKonec v:\t"$KON >> /home/karel/Backup/rsync_ftp.log
fi
done
else
echo "FTP not mounted!" >> /home/karel/Backup/rsync_ftp.log
fi
KONEC=$(date)
echo -e "\n\nZačátek v:\t$ZACATEK\nKonec v:\t"$KONEC >> /home/karel/Backup/rsync_ftp.log
Řešení dotazu:
Tak chyba byla nalezena, do crontabu stačilo doplnit řádky:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Snad moje blbost v budoucnu někomu pomůže.... 
for i in "$SOURCEFOLDER"/*; do
rsync -vhrtlz --exclude-from=/usr/local/bin/rsync_ftp_exclude.txt --delete \
"$i" "$TARGETFOLDER/" >> /home/karel/Backup/rsync_ftp.log
done
Skript je najednou jednodušší a bezpečnější. Na ty uvozovky nezapomínej.
, takže to nebyl prvořadý problém.Ono, když teď vím, kde byl zakopaný pes tak se asi mohu vrátit k mnohem jednodušší - původní variantě, kdy prostě dám synchronizovat jen složku, kde je namountován FTP a složku pro zálohy.
A na ty uvozovky se budu snažit myslet - až zase jednou budu bastlit (kdyby jste věděli, kolik času jsem strávil nad "svéráznými findy" a ostatními řádky skriptu
).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.