Portál AbcLinuxu, 18. dubna 2024 10:35


Dotaz: Skript puštěný z cronu běží neúměrně dlouho

1.8.2013 14:46 CecilKa | skóre: 6 | blog: Vsehochut
Skript puštěný z cronu běží neúměrně dlouho
Přečteno: 342×
Odpovědět | Admin
Zdravím všechny a prosím o radu.

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:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (voda)
1.8.2013 16:47 CecilKa | skóre: 6 | blog: Vsehochut
Rozbalit Rozbalit vše VYŘEŠENO: Skript puštěný z cronu běží neúměrně dlouho
Odpovědět | | Sbalit | Link | Blokovat | Admin

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.... :-)

1.8.2013 17:07 Kit
Rozbalit Rozbalit vše Re: VYŘEŠENO: Skript puštěný z cronu běží neúměrně dlouho
Když jsem viděl tu hromadu neošetřených stringů, tak jsem ten skript ani nedočetl. Ten skript je od základu špatně a je jen otázkou času, kdy na to doplatíš.
1.8.2013 17:23 CecilKa | skóre: 6 | blog: Vsehochut
Rozbalit Rozbalit vše Re: VYŘEŠENO: Skript puštěný z cronu běží neúměrně dlouho
A můžeš svůj názor více objasnit, abych věděl co hledat , upravovat...
"Skript" zbastlím jednou za .... pár let? A kdybych teď náhodou nebyl po operaci, tak se k tomu ani nedostanu...
Ale i tak díky za tvůj příspěvek.
1.8.2013 18:41 potato
Rozbalit Rozbalit vše Re: VYŘEŠENO: Skript puštěný z cronu běží neúměrně dlouho
Tak pro začátek použít * namísto `ls`, kde se to okamžitě rozbije s mezerami v názvech souborů.

Stejně tak všechny argumenty příkazů jako $SOURCEFOLDER/$i/ by měly být v uvozovkách, aby zůstaly vcelku.

Ty findy jsou trochu svérázné, ale budiž. Alespoň použij -delete namísto spouštění rm.
1.8.2013 18:45 Kit
Rozbalit Rozbalit vše Re: VYŘEŠENO: Skript puštěný z cronu běží neúměrně dlouho
Už jedna mezera v názvu způsobí, že ti skript přestane fungovat. Přitom stačí drobná změna:
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.
1.8.2013 19:11 CecilKa | skóre: 6 | blog: Vsehochut
Rozbalit Rozbalit vše Re: VYŘEŠENO: Skript puštěný z cronu běží neúměrně dlouho
TO: potato & kit
Děkuji oběma za vaše tipy a nasměrování
Na ten problém s mezerami v názvech jsem narazil při testování a mám ho tu poznamenaný, jako bod k řešení, ale vzhledem k tomu, že v tuto chvíli je na FTP vše bez mezer a ani nemám ve zvyku zapisovat názvy s mezerou - mám rád "_" :-), 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 :-) ).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.