Cron¶
Cron to specjalny program, odpowiedzialny za cykliczne wykonywanie zadań. Każdy użytkownik posiada specjalną tabelę crontab, w której może ustawić jakie programy i kiedy powinny zostać automatycznie uruchomione.
DevilWEB¶
Po zalogowaniu się do panelu administracyjnego konfiguracja Cron znajduje się w zakładce Zadania Cron. Po kliknięciu przycisku Edytuj pokaże się tabela cron. Z prawej strony wpisu jest przycisk do włączenia bądź wyłączenia danego wpisu oraz przycisk do usunięcia zadania.

Aby dodać wpis należy kliknąć + Dodaj zadanie Cron i wypełnić pola na stronie. Na przykładz skrypt /usr/home/LOGIN/skrypt.sh będzie wykonywany o 5:30 co niedzielę.

Linia poleceń¶
Zarządzanie tabelami Cron jest również możliwe z linii poleceń komendą crontab:
crontab -l- pokazuje obecną tabelę croncrontab -e- edytuje tabelęcrontab -r- usuwa tabelę
Po wykonaniu polecenia crontab -e tabela otwierana jest w domyślnym edytorze. Aby zmienić domyślny edytor należy zmienić zmienną środowiskową EDITOR. Na przykład zmiana domyślnego edytora na nano odbywa się przez polecenie: echo 'export EDITOR=nano' >> $HOME/.bashrc && source $HOME/.bashrc. Dopisane export EDITOR=nano do pliku /usr/home/LOGIN/.bashrc spowoduje trwałą zmianę domyślnego edytora.
Przykłady¶
Poniżej prezentujemy przykładową tabelę cron. Należy zwrócić szczególną uwagę na zmienną PATH - sprawia ona, że praca z Cronem staje się wygodniejsza.
# Używaj /usr/local/bin/bash do wywoływania komend. Ta linijka nie jest wymagana do działania crontab.
SHELL=/usr/local/bin/bash
# Użyj następującej wartości zmiennej PATH. Bez tego musimy podawać pełne ścieżki do binarek
# (przykładowo, zamiast python musimy podać /usr/local/bin/python, etc.)
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/home/LOGIN/bin
# Uruchamiaj się 5 minut po północy, codziennie
5 0 * * * /usr/home/LOGIN/bin/daily.job >> /usr/home/LOGIN/tmp/out 2>&1
# Uruchamiaj się o 14:15 pierwszego dnia każdego miesiąca -- wyjście jest
# przesyłane na adres e-mail
15 14 1 * * /usr/home/LOGIN/bin/monthly
# Denerwuj Stefana od poniedziałku do piątku o godzinie 22:00
0 22 * * 1-5 echo "Stefanie, jest już 22:00. Gdzie są Twoje dzieci?!" | mail -s "Wybiła 22:00" stefan@domena
# Wysyłane maila (codziennie o północy)
0 0 * * * echo -e "Subject: Tytuł maila\n$x" | /usr/sbin/sendmail adres@email
# Inne przykłady
23 0-23/2 * * * echo "uruchamiaj 23 min po polnocy, 2, 4, ..., codziennie"
5 4 * * sun echo "Uruchamiaj się 5 po 4 w niedziele"
0 10 * * 1,3 echo "Uruchamiaj się w każdy poniedzialek i srode o 10.00"
*/2 * * * * echo "Uruchamiaj się co 2 minuty"
# Lub z wykorzystaniem zapisu słownego z wykorzystaniem znaku "@" tzn.:
@reboot echo "System uruchomił się!"; # - polecenie uruchamiane każdorazowo po uruchomieniu systemu
@yearly echo "Minął kolejny rok!"; # - odpowiednik zapisu "0 0 1 1 *
@annually echo "Minął kolejny rok!"; # - jak wyżej
@monthly echo "Minął kolejny miesiąc!"; # - odpowiednik zapisu "0 0 1 * *"
@weekly echo "Minął kolejny tydzień!"; # - odpowiednik zapisu "0 0 * * 0"
@daily echo "Minął kolejny dzień!"; # - odpowiednik zapisu "0 0 * * *"
@midnight echo "Minął kolejny dzień!"; # - jak wyżej
@hourly echo "Minęła kolejna godzina!"; # - odpowiednik zapisu "0 * * * *"
flock¶
W przypadku często uruchamianych zadań, których czasu wykonania nie da się z góry łatwo przewidzieć, może wystąpić sytuacja, w której kolejna instancja zadania zostanie uruchomiona przed zakończeniem poprzedniej. Aby temu zapobiec, można wykorzystać mechanizm blokad udostępniany przez polecenie flock.
flock wykorzystuje mechanizm na podstawie wspólnego pliku blokady (lock file). Przy uruchomieniu polecenia zakładana jest blokada na wskazanym pliku lub katalogu. Jest ona utrzymywana przez czas wykonywania polecenia i zwalniana po jego zakończeniu.
Jeżeli w tym samym czasie zostanie uruchomiona kolejna instancja flock próbująca uzyskać blokadę na tym samym pliku, domyślnie będzie ona oczekiwać na zwolnienie blokady. Dzięki temu kolejne uruchomienie zadania rozpocznie się dopiero po zakończeniu poprzedniego.
Po zwolnieniu blokady jeden z oczekujących procesów może ją przejąć i rozpocząć wykonywanie wskazanego polecenia.
Plik wykorzystywany jako plik blokady może znajdować się w dowolnej lokalizacji. Jeżeli wskazany plik nie istnieje, flock utworzy go automatycznie, o ile użytkownik uruchamiający polecenie ma odpowiednie uprawnienia.
Składnia polecenia:
/usr/local/bin/flock [ścieżka_do_pliku_blokady] [polecenie_do_wykonania]
Przykładowe polecenie:
/usr/local/bin/flock /home/loginkonta/flock1.lock /usr/bin/fetch --no-verify-hostname --no-verify-peer --user-agent="Devil2 CRON fetch" -o /dev/null https://mojastrona.pl/cron.php