Portál AbcLinuxu, 10. května 2025 07:20

Dotaz: serializace paralelnich cron jobu

rADOn avatar 30.3.2011 19:38 rADOn | skóre: 44 | blog: bloK | Praha
serializace paralelnich cron jobu
Přečteno: 308×
Odpovědět | Admin
Mam N redundatnich debianich stroju na kterych jsou naplanovane ulohy v cronu. Chtel bych dosahnout toho, aby bezely vsechny crony a zustala redundance, ale nebezely najednou. Co jsem uz zkousel:
  1. Zatim se to resi klasicky stridanim intervalu v crontabu (sude/liche hodiny apod.), ale to se mi prestava libit. Protoze jsou pak na masinach ruzne crontaby, je v tom hokej a muze se stat ze pri upgradu baliku lidsky faktor zapomene crontaby upravit.
  2. Mit pripravene ruzne konfigurace. Zkouseli jsme tu variantu pri instalaci nasymlinkovat z postinst skriptu jeden z N zabalenych crontabu, ale museli jsme ji opustit. Samotne baleni vice crontabu je ok, ale vybirani mezi nimi v postinstu je krehke a vubec spatny napad. Otazka jedna - neumí to nejaky pokrocilejsi cron demon zaridit? Pokud by se rozhodovani ridilo centralne z cronu, napriklad globalnim nastavenim nejake promenne, bylo by to robustnejsi nez hadat pri kazdem upgradu balicku. (promenne ve vixie cronu pouzit nelze)
  3. Wrapper nad ulohou ktery by zjistil ze uz bezi nebo bezela jinde a ukoncil by se. Bohuzel nejsem schopny vymyslet jak to popsat tak aby to google pochopil :-( Zatim jsem vydoloval jen spousty preslozitenych elektraren na rozdileni uloh do obrovskych clusteru, zatimco ja bych chtel unixovy nastroj - delat jednu jednoduchou vec a delat ji dobre a srozumitelne.
  4. Jine napady?

P.S. Ano, umim si napsat kousek kodu ktery to pohlida, ale nechce se mi verit ze bych byl prvni kdo na neco takoveho pomyslel.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.3.2011 20:03 Ragzid | skóre: 24 | blog: Pivní koutek | Liberec-Brno
Rozbalit Rozbalit vše Re: serializace paralelnich cron jobu
Odpovědět | | Sbalit | Link | Blokovat | Admin
3. neco jako:
#!/bin/sh
if [ ! -f /mnt/remote/var/run/uloha.pid ]; then
  touch /mnt/remote/var/run/uloha.pid
  #... tady to neco dela
  rm /mnt/remote/var/run/uloha.pid
else exit 1
fi
?

pak to ale predpoklada, aby vzdy alespon jeden stroj byl vzdy funkcni 4. Posunout cas na strojich o urcity casovy interval? :-D
rADOn avatar 31.3.2011 11:51 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: serializace paralelnich cron jobu
Zavislost na jednom stroji je opak toho ceho chci dosahnout.

Stridani casu je bod 1.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
30.3.2011 20:39 Miklik | skóre: 27 | Krnov
Rozbalit Rozbalit vše Re: serializace paralelnich cron jobu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mě napadlo, mít cron spuštěny jen na jednom stroji a z něj spouštět úlohy vzdáleně přes ssh.
Netvrdím to, ale možná je to pravda.
31.3.2011 13:55 marek
Rozbalit Rozbalit vše Re: serializace paralelnich cron jobu
Odpovědět | | Sbalit | Link | Blokovat | Admin

Dobry den.

Napad:

Kazdy stroj ma nejakou jedinecnou ip adresu.

Co takhle generovat adresy tak, aby ztoho bylo jasne, kdy se to ma poustet.

Marek

rADOn avatar 31.3.2011 15:30 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: serializace paralelnich cron jobu
Zajimavy napad… na urcity veci by to mohlo byt o hodne lepsi nez hadani z fqdn ale moje otazka je - jak toho dosahnout? Jak rici cronu "ignoruj nasledujic job pokud mas IP // N, subdomenu XX nebo neco podobneho? Muzu samozrejme napsat nejakej stupidni wrapper nebo postinst skript, me ale zajima jestli to nejde zaridit samotnym cronem, aby se to nastavilo jednou a naporad a ne pri kazdy instalaci balicku.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
1.4.2011 10:31 marek
Rozbalit Rozbalit vše Re: serializace paralelnich cron jobu

Dobry den.

Myslim, ze nejsnazsi je stupidni wrapper, ktery je pousten cronem a ktery pousti Vas script. To znamena, ze to cron bude poustet napriklad kazdou hodinu, a pokud 5 konecnych bitu adresy se shoduje s hodinou pak spust zbytek.

#!/bin/bash
LASTBYTE=$(ip addr show dev eth0 scope global | sed -e"s/[[:blank:]]\+inet[[:blank:]]\+[^\.]\+\.[^\.]\+\.[^\.]\+\.\([^\/]\+\)\/.*/\1/p;d");

if [ "$((LASTBYTE & 31 ))" -eq "$(date +%k)"  ]
then
   echo "zde je funkcni cast"
fi

Marek

31.3.2011 21:28 Kit
Rozbalit Rozbalit vše Re: serializace paralelnich cron jobu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pochopil jsem požadavek asi takto:
STANICE=$(cat "cislo_stanice.txt")*10
$STANICE * * * * /bin/prog1
$STANICE 5,17 * * * /bin/prog2
ale obávám se, že takhle to fungovat nebude. Ovšem mohlo by pomoct nějaké makro pro VIM nebo ten crontab generovat při každém startu.

U toho druhého způsobu stačí vygenerovat řetězec v libovolném programu, který dodá minuty třeba podle jména počítače nebo IP, vloží je do správného místa a odešle do crontabu. Například takto:
#/bin/sh
STANICE=$(generator)
echo "$STANICE * * * * /bin/prog1" | crontab -
a tento skript uložit někam do /etc/init.d/
1.4.2011 09:31 pepazdepa
Rozbalit Rozbalit vše Re: serializace paralelnich cron jobu
Odpovědět | | Sbalit | Link | Blokovat | Admin
takze potrebujes mit kontrolu jaky joby bezi kde a v kolik na vice serverech.

k tomu se pouzivaji tzv. job schedulers, v enterprise napr. IBM Tivoli Workload Schedules (TWS), $Universe atp. Rikal jsem si, ze vyzkousim http://en.wikipedia.org/wiki/Open_Source_Job_Scheduler ale zatim jsem nenasel cas.

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.