Scheduler bez tajemnic - możliwości cyklicznego wykonywania programów
Ostatnia zmiana: 2023-05-17 19:19
Cron
Cron (scheduler) jest mechanizmem pozwalającym na cykliczne uruchamiania określonego polecenia w systemie linuksowym. Cykliczne oznacza albo co określony okres czasu albo o ściśle określonej godzinie lub dacie. Cron może uruchamiać zadania nie częściej niż co minutę, więc jeżeli istnieje potrzeba wykonywania czegoś co kilka sekund to najlepiej napisać własny skrypt z odpowiednią pętlą i poleceniem sleep. Cron występujący w OpenWrt jest w nieco uproszczonej formie, brak mu np. niektórych makr.
Crontab
Zadania definiuje się w specjalnym pliku będącym definicją poleceń do wykonania. Ma on określoną strukturę która jest wymagana do poprawnego działania. Definicja jednego zadania wygląda następująco:
* * * * * komenda do wykonania
- - - - -
| | | | |
| | | | +----- dzień tygodnia (0 - 6) (Niedziela=0, Poniedziałek=1, Wtorek=2,...,Sobota=6)
| | | +------- miesiąc (1 - 12)
| | +--------- dzień miesiąca (1 - 31)
| +----------- godzina (0 - 23)
+------------- minuta (0 - 59)
Za gwiazdkę można podstawić albo liczbę albo zakres. Najlepiej przedstawić to na przykładach:
- Wykonanie pliku dziesięć minut po pełnej godzinie.
10 * * * * /usr/bin/plik_do_wykonania
- Wykonanie pliku co dziesięć minut.
*/10 * * * * /usr/bin/plik_do_wykonania
- wyłączenie transmission o 9 rano
0 9 * * * /etc/init.d/transmission stop
- wykonanie backupu w każdą sobotę o 3:15 nad ranem
15 3 * * 6 /usr/bin/backup.sh
Przykłady są proste, nie powinno być z nimi problemu. Można także z skorzystać z
graficznego konfiguratora mojej produkcji.
Dodanie zadania do wykonania
Albo dodajemy zadanie poprzez wywołanie specjalnego edytora
należy wtedy wpisać całe polecenie ręcznie, albo dodajemy po prostu nowy wpis do crontaba
# echo "*/10 * * * * /bin/tester.sh" >> /etc/crontabs/root
Po tej operacji dobrze jest zrestartować proces cron jeżeli jest już uruchomiony
# /etc/init.d/cron restart
Uruchomienie crona
# /etc/init.d/cron enable
# /etc/init.d/cron start
Zakończenie
W większości przypadków niezbędne jest ustawienie prawidłowego czasu w systemie aby polecenia wykonywały się o właściwej godzinie.