Strony internetowe mogą uruchamiać zaplanowane zadania z Cron

zegar

Posiadamy w pracy szereg redundantnych systemów monitorujących, które regularnie realizują procesy. Niektórzy biegają co minutę, inni raz w nocy, w zależności od tego, co robią. Na przykład możemy uruchomić skrypt, który eksportuje wszystkich klientów, którzy nie dokonali zakupu w ciągu 30 dni, aby wysłać im kupon.

Zamiast próbować śledzić je wszystkie ręcznie, znacznie łatwiej jest tworzyć zadania, które są automatycznie planowane i wykonywane. W systemach opartych na Uniksie jest to realizowane za pomocą Crona. Wy, ludzie, którzy wiecie, co robicie, możecie edukować mnie i czytelników, jeśli wyrzucę jakąkolwiek dezinformację.

To niefortunne, ale typowy web developer w ogóle nie jest zaznajomiony z Cronem. Nawet jeśli tak, firmy hostingowe często nie zapewniają dostępu ani wsparcia dla Crona. Mój host jest jednym z tych ostatnich – pozwalają z niego korzystać, ale go nie obsługują.

Co to jest Cron?

cron pochodzi od greckiego słowa Chronos, oznaczającego czas. Cron działa w ciągłej pętli, aby uruchamiać zadania, które są gromadzone przez Crontab (być może nazwane dla Zakładkaulator. Te zadania są zwykle nazywane Cronjobs i mogą odnosić się do skryptów w Twojej witrynie.

Objaśnienie diagramu Crona

Jak skonfigurować plik Crontab

Sprawienie, by Cron faktycznie działał, może być trudne, więc oto czego się nauczyłem i jak to zrobiłem Jeśli ssać:

  1. Skonfigurowałem swój skrypt, aby sprawdzić Twittera API aby zobaczyć, czy ktoś odpowiedział @jezeli. Porównałem te wiadomości z wiadomościami, które już zapisałem na stronie, wprowadzając nowe.
  2. Gdy skrypt działał, włączyłem uprawnienia użytkownika do wykonywania skryptu (744) i dodałem odwołanie do skryptu do mojego pliku Cronjob - więcej o tym później.
  3. Następnie musiałem zalogować się do mojej witryny przez SSH. Na komputerze Mac wymagało to otwarcia Terminala i pisania Nazwa użytkownika SSH@domena.com gdzie nazwa użytkownika to nazwa użytkownika, którego chciałem użyć, a domena to witryna internetowa. Zostałem wtedy poproszony o hasło i podałem.
  4. Następnie spróbowałem uruchomić skrypt bezpośrednio z wiersza poleceń, wpisując nazwę pliku i ścieżkę względną na serwerze: /var/www/html/myscript.php
  5. Gdy wszystko działało poprawnie, dodałem niezbędny kod Unix w pierwszym wierszu pliku: #! / usr / bin / php -q . Wydaje mi się, że to po prostu mówi Unixowi, aby użył PHP do wykonania skryptu.
  6. W wierszu poleceń terminala wpisałem crontab (inni mogą potrzebować wpisać crontab -e) i naciśnij enter… i to było wszystko, czego potrzeba!

Składnia Twojego pliku Cronjob

W odniesieniu do punktu 2 powyżej, Cron wykorzystuje genialny schemat do określania, kiedy twoje skrypty zostaną wykonane. W rzeczywistości możesz skopiować i wkleić to do pliku Cronfile (na moim hoście znajduje się w / var / spool / cron / z nazwą pliku taką samą jak moja nazwa użytkownika).

# + —————- minuta (0 - 59)
# | + ————- godzina (0–23)
# | | + ———- dzień miesiąca (1–31)
# | | | + ——- miesiąc (1–12)
# | | | | + —- dzień tygodnia (0 - 6) (niedziela = 0 lub 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Powyższe spowoduje wykonanie mojego skryptu co minutę. Gdybym chciał, aby działał tylko raz na godzinę, po prostu podałbym, ile minut po godzinie ma działać, więc gdyby było na 30 minutach:

30 * * * * /var/www/html/myscript.php

Upewnij się, że ustawiłeś również uprawnienia do tego pliku jako wykonywalne! Odkryłem, że najważniejszymi czynnikami były składnia, uprawnienia i wykonywanie crontab z okna Terminala. Za każdym razem, gdy ponownie zapisywałem plik, moje uprawnienia również wymagały zresetowania!

AKTUALIZACJA: Jeśli chcesz mieć pewność, że zadania są uruchomione, wystarczy zaktualizować pole bazy danych o czas ostatniego uruchomienia skryptu. Jeśli zdarza się to rzadziej, możesz po prostu napisać e-mail wysłany do siebie.

Dodatkowe zasoby Cron:

Ile zadań można zautomatyzować za pomocą Cron?

Komentarze 8

  1. 1

    Dobrze omówiony artykuł na temat konfigurowania crona, dla kogoś nowego w crojobach najtrudniejszą częścią konfigurowania crona jest ustalenie interwału wykonania cronjob, a błędny interwał jest dość powszechny przy pierwszej próbie. Jeśli twoje cronjobs są wrażliwe na czas, dobrze jest dołączyć do skryptu kilka kodów, które będą odzwierciedlały status, aby być na bieżąco informowanym o statusie wykonania zadania.

  2. 2

    Cześć Doug,

    Kilka kwestii do rozważenia podczas pracy z zadaniami cron.

    Po pierwsze, po kilkudziesięciu będziesz żałować, że nie masz interfejsu użytkownika, bazy danych i składni w języku angielskim 😉

    Po drugie, cron uruchomi zadanie o określonej godzinie, niezależnie od tego, czy poprzednie wywołanie zadania zostało zakończone. Zatem uruchamianie zadania raz na minutę, które zajmuje 2 minuty, szybko doprowadzi do wykonania wielu takich samych zadań.

    Następnie nie ma prawie żadnego raportowania błędów, gdy coś pójdzie nie tak, więc musisz dodać własne raportowanie błędów.

    Odniosłem się do nich na kilka sposobów:
    - wyzwolić aplikację za pomocą crona w bazie danych, aby określić, co należy uruchomić. Uruchom go raz na minutę lub godzinę, w zależności od tego, co chcesz
    - niech każdy skrypt utworzy plik `` blokady '' w / tmp i jeśli istnieje, nie zaczynaj ponownie, zapobiega to duplikowaniu zadań, jeśli ich nie chcesz
    - jeśli skrypt znajdzie plik blokady starszy niż 1 godzinę (lub cokolwiek sugeruje, że nie żyjesz), wyślij powiadomienie e-mail
    - niech skrypt wyśle ​​e-mail w przypadku niepowodzenia zadania, abyś wiedział, że coś poszło nie tak
    - spójrz na frameworki, takie jak Flux lub komercyjne harmonogramy, gdy twoje potrzeby wykraczają poza kilka skryptów

    Chris

  3. 4

    Dodam również, że w większości systemów Linux / Unix, „crontab -e” jest tym, czego używasz do edycji pliku crontab. Myślę, że Twój host (Jumpline) używa zmodyfikowanej wersji ze względów bezpieczeństwa.

  4. 5

    Wciąż pamiętam pierwszy dzień, w którym spotkałem Cronniego. Słyszałem o niej różne rzeczy, że była niezawodna, zawsze na czas, ale czasami trochę zagmatwała jej intencje.

    Przekonałem się, że to prawda, ponieważ na początku była dla mnie kompletną tajemnicą. Po wypytaniu o nią, dość szybko zrozumiałem, jak lubi operować. Teraz nie wyobrażam sobie dnia bez niej w moim życiu. Sprawia, że ​​rzeczy przyziemne są ekscytujące i zdejmuje wiele ciężarów z moich ramion.

    Z całą powagą czuję, że zarysowałem powierzchnię tylko tym, co mogę zautomatyzować za pomocą zadań cron. Naprawdę są najlepszymi przyjaciółmi programistów. Jeśli używasz kogoś takiego jak CPanel do zarządzania serwerem, zapewnia on znacznie bardziej przyjazny interfejs do tworzenia cronów. W komplecie z rozwijanymi menu dla minut, godzin, dni, miesięcy itp., Które tworzą linię cron dla Ciebie.

  5. 7

    Zdecydowanie widzę, że jest to coś, z czego powinien korzystać każdy marketer… Czy jest ktoś, kto może świadczyć tę usługę, ponieważ brzmi to trochę zbyt „technicznie”?

Co o tym myślisz?

Ta strona używa Akismet do redukcji spamu. Dowiedz się, jak przetwarzane są dane komentarza.