Uwaga na cron’a!
Cron to jeden z przejawów uporządkowania w Linuksie - przejrzysta struktura crontab, katalogi na zadania daily, hourly itp. Ale jest kilka zawiłości, na które koniecznie trzeba zwrócić uwagę.
Po pierwsze bądźmy pewni, że znamy kolejność kolumn:
MIN HOUR DAY MONTH WEEKDAY USER COMMAND
Najczęstszy błąd to oczywiście odruch użycia
12 54 * * * root cos
jako skryptu o 12:54. Ten skrypt uruchomi się 12 minut po pięćdziesiątej czwartej.
Kolejna kwestia: niedziela. Ma numer 0, czy 7. Otóż oba. Stąd trzeba uważać bo odruch programisty C++ każe wszystko iterować od zera. Ale jeśli zaczynaliśmy od JavaScriptu to jesteśmy uratowani 😉 (w JS niedziela to 0).
Coś na co sam się naciąłem to zmienna środowiskowa PATH. Druga linijka pliku /etc/crontab definiuje ją. Łatwo popełnić błąd dodając u siebie jakiś katalog do path’a i dodając goły skrypt do crona. Nic z tego - będzie problem. I nie jest wcale o to tak trudno: jeden z programów zażyczył sobie wgrać się do /usr/local/bin. Dlatego najlepiej używać ścieżek bezwzględnych i dodać nasze katalogi z binarkami do PATHa pliku crontab dla bezpieczeństwa.
Innym zagrożeniem jest pierwsza linia crontab’a:
SHELL=/bin/sh
Jest o tyle niebezpieczna, że jeśli nie zaczynamy naszych skryptów basha od standardowego
#!/bin/bash
to możliwe, że zajmie się nami starsza i bardziej uboga w funkcje klasyczna powłoka Unixa. Grozi nam to na bardziej niestandardowych lub starych systemach. Zwykle jest to link do bash’a, ale jeśli nie to może się okazać, że cudowne polecenia i oneliner’y zawiodą.