[#] Zarządzaj zaplanowanymi zadaniami - cron i at

( Ostatnio zmieniony pon., 16/06/2008 - 23:34 )
 

1. Z użyciem CRON

Pliki zezwalające lub blokujące dostęp dla danych użytkowników to: /etc/cron.allow oraz /etc/cron.deny. Aby zabronić użytkownikowi wykonywania zaplanowanych zadań wpisz jego login do odpowiedniego pliku. Jeśli plik nie istnieje to go utwórz. Potrzebny restart demona „cron“

Przykładowy główny plik konfiguracyjny daemona „cron“ – /etc/crontab

MAILTO=root

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
HOME=/

# run-parts - uruchamiaj wszystkie skrypty z katalogów: (co godzinę, raz dziennie, raz na tydzień, raz na miesiąc)
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

W katalogach /etc/cron.* umieszczone są skrypty z ważnymi systemowymi poleceniami, które są cyklicznie wywoływane – właścicielem tych zadań jest root.

Zmienne:

MAILTO
zawiera e-mail użytkownika, do którego będą wysłane raporty błędów jeśli cron nie będzie mógł wykonać zaplanowanego zadania.
SHELL
powłoka z której ma korzystać cron,
PATH
ścieżki
HOME
katalog domowy

Opis pól

Pola czasowe (pięć pierwszych kolumn) ich reprezentacje oraz przyjmowane wartości:

numer pola reprezentacja przyjmowane wartości
1 minuty 0–59
2 godziny 0–23
3 dni miesiąca 1–31
4 miesiące 1–12 (również 3 literowe skróty angielskie)
5 dni tygodnia 0–7 ( 0 i 7 oznaczają niedzielę, można stosować 3 literowe skróty ang.)

Przykłady interpretacji pól czasowych

05 * * * *
„gdy ilość minut wynosi 5“ – czyli co godzinę – hourly
01 2 * * *
„o godzinie 02:01“ – raz dziennie – daily
21 2 * * 0
„o godzinie 02:21 w niedzielę“ – raz na tydzień – weekly
41 2 1 * *
„każdego pierwszego o 2:41“ – raz na miesiąc – monthly

Dodawanie zadań

crontab -u login plik_crona

Opcje „crontab“:

-l
wyświetlenie zadań,
-r
usunięcie całej tablicy „crona“,
-e
edycja tablicy.

Przykład:
przysyłaj mi raporty 12 i 22 każdego miesiąca o godzinie 10:00.

0 10 12,22 * * /root/polecenie | mail -s "raport polecenia" root < /root/raporty/polecenie.log

Warto pamiętać również o:

  • pole zawierające gwiazdkę oznacza, że ta wartość jest nieistotna w danej regule
  • można wskazać katalog ze skryptami, które mają być uruchamiane:
0 0 1 * *     $HOME/bin/co_miesiac
  • liczby można podawać na wiele sposobów – jako zakresy lub jako wyliczenia np.:
    • pole minuty 1,11,21,31,41,51 – czyli co 10 minut
    • pole godziny 10–20 – czyli od 10 do 20 godziny

Przykład użycia:

# If you don't want the output of a cron job mailed to you, you have to direct
# any output to /dev/null.  We'll do this here since these jobs should run
# properly on a newly installed system, but if they don't the average newbie
# might get quite perplexed about getting strange mail every 5 minutes. :^)
#
# Run the hourly, daily, weekly, and monthly cron jobs.
# Jobs that need different timing may be entered into the crontab as before,
# but most really don't need greater granularity than this.  If the exact
# times of the hourly, daily, weekly, and monthly cron jobs do not suit your
# needs, feel free to adjust them.
#
# Run hourly cron jobs at 47 minutes after the hour:
47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null
#
# Run daily cron jobs at 4:40 every day:
40 2 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null
#
# Run weekly cron jobs at 4:30 on the first day of the week:
# 1 - poniedzialek bo niedziela jest 0 - pierwszym dniem
30 4 * * 1 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null
#
# Run monthly cron jobs at 4:20 on the first day of the month:
20 4 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null

# uruchamia skrypty co 15 minut - przyda sie do roznych testow:
*/15 * * * * /usr/bin/run-parts /etc/cron.15min 1> /dev/null

# uruchamia skrypty co 3 minuty - przyda sie do roznych testow na szybko:
*/3 * * * * /usr/bin/run-parts /etc/cron.3min 1> /dev/null



###################################### m4 #######################################
#  pierwsza gwiazdka oznacza minutę, o której ma zostać wykonanie zadanie (0-59)
#  druga gwiazdka oznacza godzinę (0-23)
#  trzecia gwiazdka oznacza dzień miesiąca (1-31)
#  czwarta gwiazdka oznacza miesiąc (1-12)
#  piąta gwiazdka oznacza dzień tygodnia (0-6)
#  na końcu zapisana jest komenda, która będzie uruchomiona o podanym czsie
#  Co do dnia tygodnia, to 0 oznacza niedzielę ?

# Minuta (0-59) |  Godzina (0-23) | DzienMiesiaca (1-31) |  Miesiac (1-12) |  DzienTygodnia (0-6)
#      *                *                  *                      *                  *
#

# ( root uruchamia plik rc.dsltest co minutę we wszystkie dni tygodnia poza środą 1,2,,4,5,6,7)
# */1 * * * 1,2,4,5,6,7  root  /etc/rc.d/rc.dsltest

# ( uruchomienie pliku rc.dsltest co minutę, we wszystkie dni tygodnia)
# * * * * *  root  /etc/rc.d/rc.dsltest

# (czyli uruchomienie pliku rc.dsltest co 15 minut)
# */15 * * * *  root  /etc/rc.d/rc.dsltest

# (czyli co 5 minut przez całą dobę)
# Wykonuje autoczyszcenie: zaznacza nieużywane moduły jako "do usunięcia" i  usuwa  już  zaznaczone  moduły.
# Moduły  zostają usunięte,  jeśli  nie  zostały  użyte od czasu poprzedniego autoczyszczenia.
# Te dwa przebiegi zapobiegają usunięciu modułów chwilowo nieużywanych.
# 00-55/5 * * * *  root  /sbin/rmmod -a

# (co 4 godziny)
# 00  00,04,08,12,16,20 * * *  root  /etc/rc.d/rc.dsltest

# (j.w. - co 4 godziny)
# 00  00-23/4 * * *  root  /etc/rc.d/rc.dsltest

# (użytkownik antek otrzyma w każdy piątek komunikat przypominający, że w życiu nie liczy się tylko praca ;)
# 00 15 * * 5  /bin/mail -s "Zaczyna sie weekend. Koniec pracy nadgorliwcze!" antek

# Można też startować serwer apache2, by działał codziennie od godziny 8 rano do 22 wieczorem:
# 00  08 * * *  root  /etc/rc.d/init.d/apache2 start
# 00  22 * * *  root  /etc/rc.d/init.d/apache2 stop

######################################################

# co 5 minut - mrtg

# 0,5,10,15,20,25,30,35,40,45,50,55 * * * *  /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/cisco.cfg 1> /dev/null
# 0,5,10,15,20,25,30,35,40,45,50,55 * * * *  /usr/local/mrtg-2/ping/mrtg-run.sh 1> /dev/null

# co 5 minut
# */5 * * * *  /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/cisco.cfg 1> /dev/null

*/5 * * * *  /usr/local/mrtg-2/ping-response/mrtg-run.sh 1> /dev/null


# */1 * * * *  /usr/local/mrtg-2/ping/test_szcz.sh 1> /dev/null


########### codziennie ##########

# sredni kurs euro z nbp.pl
00 16 * * * /usr/local/sbin/kurs_euro_html.sh

# test sms'a
00 22 * * * /usr/local/bin/sms -g plus -n 666000888 -m "Tu serwer XXX - wszystko OK!"

# wykonanie backupu
10 22 * * * /etc/rc.d/rc.backup
22 1 * * * /usr/local/sbin/dump-mysql-db-all.sh


# Paranoid checks
# 10 3 * * * /bin/chmod -R go-rwx /home/user
11 3 * * * /bin/chmod -R go-rwx /root
20 3 * * * /bin/chmod -R go-rwx /mnt/BACKUP/SYSTEM


# usuwamy nieużywane pliki
# 0 4 * * * /usr/bin/find -type f /mnt/COMMON -atime +7 -exec /bin/rm -f {} \; 2> /dev/null
# 0 4 * * * /usr/bin/find -type f /mnt/COMMON/shares/*/*.* -atime +7 -exec /bin/rm -f {} \; 2> /dev/null



#################################


######## tylko w piatek #########

# info o weekendzie
# 00 15 * * 5  /bin/mail -s "Weekend! Zmykaj do domu ! :)" do_usera@domena.pl -r od_usera@domena.pl

#################################


2. Z użyciem AT

Polecenie „at“ jak „cron“ posiada pliki zezwolenia i blokady wykonywania zadań przez użytkowników: /etc/at.allow i /etc/at.deny.

Podstawowa składania

at czas/data polecenie

Przykład:

Utwórzmy plik „polecenia.cmd“, w którym wpiszemy kilka poleceń („na potem“):

dmesg > /home/user/zrzut_dmesg.txt
ps aux > /home/user/zrzut_procesow.txt

a następnie uruchomimy:

at 12:17 < polecenia.cmd
warning: commands will be executed using /bin/sh
job 2 at Tue Jun  5 12:17:00 2007

zostaliśmy poinformowani o kolejności wykonywania poleceń oraz o numerze zadania

inne możliwości

- dzień i godzina wykonania polecenia:

at 10:21 07.06.22 < polecenia.cmd
warning: commands will be executed using /bin/sh
job 3 at 2007-06-22 10:21

- znak „+“ jako informacja, że czas(data) wykonania to suma dwóch czasów(dat). Np. za dwa dni o piątej

at 5pm + 2 days < polecenia.cmd
warning: commands will be executed using /bin/sh
job 5 at 2007-06-24 17:00

- „mieszane czasy i daty“

at 11am Jul 21 07
warning: commands will be executed using /bin/sh
at> /root/skrypcik.sh && cp /root/wynik.log /root/logi
at> <EOT>
job 5 at 2007-07-21 11:00

Zwróć uwagę, że nie podaliśmy jako argumentu pliku z poleceniami, ale w następnych liniach rozpoczynających się od znaku zachęty „at>“ podajemy polecenia do wykonania.

- „pisane czasy i daty“ np. jutro o pierwszej w nocy:

at 1am tomorrow < polecenia_na_jutro

- za trzy dni w porze herbatki

at teatime + 3 days < jutro_przy_herbacie

Zarządzanie zadaniami

Sprawdźmy kto i na kiedy zaplanował uruchomienia – służy do tego polecenie „atq“:

atq

4       2007-06-24 17:00 a root
5       2004-07-21 11:00 a root
6       2004-03-07 16:00 a root

Anulowanie zadań wykonujemy poleceniem „atrm“, jako argument(y) podajemy numer(y) zadania(ń) do usunięcia:

atrm 5 6 7

Wady polecenia „at“

Właściwie jest jedna zasadnicza wada (w odróżnieniu od cron'a) at może wykonać polecenie tylko raz o zaplanowanej por­ze.

5
Twoja ocena: Brak Średnio: 5 (3 głosy)