Gå til innhold

[Løst] rsync hvert 3. minutt: hva hvis rsync krasjer/tar for lang tid?


Anbefalte innlegg

Hei!

 

Jeg har en maskin ("photobot") som tar bilde hvert 3. minutt, og kjører rsync rett etter at bildet er tatt.

Dette for å synkronisere bildemappen med webserveren ("juliet").

 

Photobot er på nett med mobilt bredbånd som er noe ustabilt i dekningen.

Det vil si at nettet går ned av og til, og det blir dermed liggende noen bilder i "bufferen" (mappen som skal synces) i ny og ne.

 

Når rsync går i gang, kan det av og til ta litt lang tid, dersom det er mange bilder som må synces pga at det er lenge siden sist sync (les: sist det var mobildekning).

 

Problemet er da at rsync startes på nytt igjen etter 3 minutter, selv om rsync allerede er i gang med å synkronisere.

Hvordan kan jeg forhindre dette?

 

Et alternativ er:

 

Hvert 3. minutt: ta bilde og kjør rsync på newestphoto.png, og ikke hele bildemappa

Hver time: kjør rsync på hele bildemappa

 

Hvis jeg skal gjøre det på denne måten, er det 2 issues

 

1. Jeg får kun bildehistorikk hver time, men det kan jeg vel leve med

2. Dersom forrige rsync-jobb av en eller annen grunn skal ha krasjet, vil jeg drepe prosessen før jeg syncer igjen. Men jobbene som kjøres hvert 3. minutt skal drepe forrige 3-minuttsjobb, og de som kjøres hver time skal drepe forrige timesjobb. Derfor vil jo "killall rsync" før synkingen kjøres hvert trede minutt, drepe en eventuell timessync. Kan jeg "navngi" prosesser?

 

Er alternativet mitt en god løsning?

Eller finnes det en bedre måte, hvor jeg kan ivareta sync hvert 3. minutt samtidig som jeg får syncet hele historikken?

 

Beklager langt innlegg, men det var ikke så lett å forklare hva jeg mener her :)

Lenke til kommentar
Videoannonse
Annonse

Å forhindre at rsync starter når det allerede er en rsync-prosess kjørende burde være temmelig greit å ordne med et lite script. Kommandoen 'lsof /usr/bin/rsync' (gitt at rsync ligger i den mappen) avslører om rsync allerede kjører, og da skulle det bare være å bruke en if-statement som kun starter ny synkronisering dersom rsync ikke kjører allerede. Så får du en liten øvelse i bash scripting også :)

 

Resten av posten din forsto jeg ikke helt men... :p

Lenke til kommentar

Å forhindre at rsync starter når det allerede er en rsync-prosess kjørende burde være temmelig greit å ordne med et lite script. Kommandoen 'lsof /usr/bin/rsync' (gitt at rsync ligger i den mappen) avslører om rsync allerede kjører, og da skulle det bare være å bruke en if-statement som kun starter ny synkronisering dersom rsync ikke kjører allerede. Så får du en liten øvelse i bash scripting også :)

 

Resten av posten din forsto jeg ikke helt men... :p

 

Takk for svar. Nei, jeg skjønner nesten ikke posten selv ;)

 

Løsningen din er enkel og brilliant. Men hva hvis rsync-prosessen ikke har svart den siste timen?

Hvordan lager jeg et bash script som gjør dette:

 

if rsync kjører

if rsync har kjørt mer enn 1 time

kill rsync

 

kjør rsync

 

 

Takk for hjelpen :)

Lenke til kommentar

Første tanken jeg fikk var å sjekke når filen sist ble endret og dersom det er lenger enn 60 min siden kan den drepe rsync, slette lock-filen og starte på nytt.

For å finne når filen sist ble forandret: 'date +%s /sti/til/filen.lock' og tiden nå: 'date +%s'. Så skulle det bare være å lage en if-statement som dreper rsync og starter på nytt dersom "sist_forandret-tiden_nå > 3600".

 

Håper det var forståelig :)

 

 

EDIT: DevilsDecoy var kjip og fjernet utfordringen for trådstarter :p

Endret av sablabra
Lenke til kommentar

Tror dette skal funke:

 

PIDFILE=/tmp/rsync.pid

if [ -f $PIDFILE ]; then
 if [ $((`date +%s`-`stat --format=%Y $PIDFILE`)) -gt 3600 ]; then
   # Har kjørt for lenge, drep og start på nytt
   kill `cat $PIDFILE`;
   sleep 5;
   kill -9 `cat $PIDFILE`;
   rm $PIDFILE;
 else
   # Rsync kjører, men har ikke kjørt mer en 60 min
   exit;
 fi
fi

#Start ny rsync
echo -n $$ > $PIDFILE
rsync [...]
rm /tmp/rsync.pid

Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...