Portál AbcLinuxu, 6. května 2025 23:23
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 doneSkript je najednou jednodušší a bezpečnější. Na ty uvozovky nezapomínej.
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.