Archiwa tagu: crontab

Synchronizacja czasu – Linux + ntp. Wersja nieprzesadzona.

Wrzucałem już raz wpis o automatycznej synchronizacji czasu, ale po przemyśleniu tematu doszedłem do wniosku, że rozwiązanie tam zastosowane jest bez sensu. Czemu?

  1. Stawianie serwera ntpd tylko po to, żeby mieć aktualny czas na swojej maszynie, to totalny i typowy overkill. Rozwiązanie to oczywiście działa skutecznie, jest „zalecane w internetach”, ale jego nadmiarowość aż razi.
  2. Standardowa konfiguracja ntpd na CentOS (ale też pewnie w innych dystrybucjach) otwiera od razu port 123 na wszystkich możliwych interfejsach. Po co? No bo ntpd z założenia służy do serwowania czasu, a nie jego zwykłej synchronizacji.
  3. No właśnie. Po co nam serwer, skoro jedynie chcemy być klientami?

Rozwiązanie jest dużo prostsze. W CentOS 6.5, którego teraz głównie używam, standardowo zainstalowane jest cudo o nazwie ntpdate. Na 99,99999% serwerów, wystarczy synchronizacja czasu raz na dobę.

Chyba już widać co chcę przekazać. CRON + ntpdate rozwiążą nasz problem prosto i skutecznie.
Co robimy?

W katalogu /etc/cron.daily zakładamy sobie plik ntpsynchro z prawami do uruchomienia:

[root@centos /]# touch /etc/cron.daily/ntpsynchro
[root@centos /]# chmod +x /etc/cron.daily/ntpsynchro

Następnie wrzucamy do pliku tę zawartość (np. używając: nano /etc/cron.daily/ntpsynchro):
#!/bin/sh
/usr/sbin/ntpdate pl.pool.ntp.org | logger 1> /dev/null 2>&1

Dobrze jest testowo i w celu pierwszej synchronizacji uruchomić skrypt:

/etc/cron.daily/ntpsynchro

A następnie wyświetlić zawartość logu:

cat /var/log/messages | tail

Poprawnie działający skrypt powinien zalogować nam coś w ten deseń:

Jun  4 14:04:52 centos root:  4 Jun 14:04:52 ntpdate[10409]: adjust time server 217.96.29.26 offset 0.000199 sec

Co się właśnie stało? Nasz serwer, który jest w tej całej akcji KLIENTEM zapytał się serwera pl.pool.ntp.org o aktualny czas, zlogował odpowiedź i oczywiście jeżeli była taka potrzeba ustawił na naszej maszynie.
Prawda, że takie rozwiązanie jest bardziej eleganckie, prostsze i bardziej bezpieczne? 🙂

Crontab – składnia

Notorycznie zapominam składni w plikach crona, także… ściągawka.

$ crontab -e
0 2 * * * /usr/bin/skrypt.sh
PoleDozwolone wartości
Minuta0–59
Godzina0–23
Dzień miesiąca1–31
Miesiąc1–12
Dzień tygodnia0–7 (0 i 7 to niedziela)

Przykładowo:

0 2 3 4 * oznacza, że cron wystartuje o 2:00 trzeciego dnia kwietnia. Niezależnie od tego jaki to będzie dzień tygodnia.

*/5 * * * 1-5 oznacza, że wykonanie nastąpi co 5 minut, ale tylko od poniedziałku do piątku

0 17,18 * * * uruchomi job o 17:00 i 18:00, codziennie.