CRON co godzinę na hostingu? Nichuja!

0

Zabawne, ale moim obowiązkiem służbowym jest m.in. administracja dwoma serwerami (a dojdzie jeszcze vdedyk) i najzabawniejszym jest to, że mam pod władaniem serwer active na nazwa.pl – tak, wiem..

M.in. jedną z chujni na tych serwerach jest na przykład wywoływany cron nie częściej niż o każdej godzinie -> Głupio pakować mailera do żądań skryptów użytkowników zamiast wrzucać spore ilości maili do kolejki i rozsyłać właśnie przez takiego niezależnego crona.. do tego żadnej władzy nad kolejką maili, limitami i inne niefajne rozwiązania. Żeby tego było mało skrypt wywoływany przez cron jest ograniczony do 30 sekund inaczej administracja daje sobie prawo usunięcia (wyłączenia?)  go bez informowania Ciebie.

Mam akurat na głowie tak nieoptymalne rozwiązania, że wykonanie 1/100 zadania zabiera mi około 10-20s serwera, ustanowiłem w skrypcie bezpieczną granicę 25sekund aby już rzucać timeout i przerywać by nie przesadzić. Cron co godzinę = 100 godzin na wykonanie zadania ~4 dni, a to powinno być w 6 godzin max!

Rozwiązanie CRON’owej chujni serwerowej:

LOLCRON

Czyli dokładniej umożliwić wykonywanie crona przez dowolnego użytkownika, przez dowolne żądanie. W ludziach (a raczej komputerach) jest siła – dorzućmy do skryptu kilka linijek kodu w HTML np <meta refresh 180..> i napiszmy „Proszę nie zamykaj tej stronyyyyyyy…..”. Nagle „nasz cron” może być wykonywany co n czasu. Czemu by nie zostawić na kilka godzin włączonej takiej zakładki w pracy nawet na wywoływanie co 3 minuty -> 300 minut na zakończenie zadania (+ czas wykonywania skryptu) ~5 godzin. To już mniej niż 4 dni! Swoją drogą można jeszcze set_time_limit i kto mi wmówi że to jest wykonywane przez cron i że przekraczam 30 sekund, he?!

Zewnętrzne serwisy, niekoniecznie stworzone do tego celu

Postanowiłem jeszcze przy tej okazji użyć mon.itor.us – coś w stylu UniAlert – notyfikator że dany serwis padł, odżył itp. Co prawda można tam najczęstsze checki ustawić na co 30 minut, no ale to i tak już skrócony czas z 4 do dwóch dni. Wspominając z łezką w oku.. kiedyś UniAlert SMSy wysyłał do polski za darmo.. również świetne narzędzie do inwigilowania komputerów użytkowników podpiętych bezpośrednio do sieci.

Dopisek: Zewnętrzny serwer z częstszym CRON’em

Nie pomyślałem o tym pisząc tego posta, jednak na facebooku Athlan skłonił mnie do jeszcze dalszego myślenia: przykładowo mój głupi webd daje mi możliwość ustawienia CRON’a już na każdą minutę -> możliwości rodzi się sporo:

  • wget http://… jako polecenie cron
  • php moj_skrypt_na_tym_serwerze.php
    Realizujący wywołania i akcje tamtych skryptów / odwalający czarną robotę na innym serwerze.

Też dopisek: Zwalmy na odwiedzających jakiś ułamek ułamka

Raczej w CRON’ach nie pakujemy zaawansowanych obliczeń i innych rzeczy, czego wykonanie jednej „jednostki rzeczy” zabiera nam tyle sekund. Często to jakieś pętle i to cholernie nieoptymalne – czemu z 1000 powtórzeń zajmujących te 20sekund nie damy odwiedzającemu 100 na np. 5 minut siedzenia na stronie? Nie obrazi się z 2 sekund dłuższego czekania na załadowanie strony.

I tak na dzień dzisiejszy bez problemu wystarcza mi LOLCRON co półtorej minuty ;-)  Tyle póki co. Raz na tydzień chwila na napisanie posta jest, stąd taka marna jakość.

Tagi: , , , , ,

Skomentuj