eredeti weboldal

cron – időzített feladatkezelés

Köszönet a leírásért masterminds-nak: Időzített feladatkezelés (cron)

 

A cron alkalmazások lényege és szerepe, hogy végrehajtja a számára meghatározott programokat, feladatokat megadott időközönként. Sokfajta időzített feladatkezelő létezik (dcron, fcron, vixie-cron stb…), ezért csak az általános információkat ismertetem róla. Démonként futó szolgáltatás, ezért indítófájlját az /etc/init.d-ben találjuk meg (pl.: crond, vixie-cron vagy egyéb cron-ra utaló indítófájl). Az alapértelmezett konfigurációs fájlja az /etc/crontab. Nézzünk bele egy ilyen állományba:

# for vixie cron

#
# $Header: /var/cvsroot/gentoo-x86/sys-process/vixie-cron/files/crontab-3.0.1-r4,v 1.1 2005/03/04 23:59:48 ciaranm Exp $
#
#

# Global variables
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# check scripts in cron.hourly, cron.daily, cron.weekly and cron.monthly
0  *  * * *     root    rm -f /var/spool/cron/lastrun/cron.hourly
1  3  * * *     root    rm -f /var/spool/cron/lastrun/cron.daily
15 4  * * 6     root    rm -f /var/spool/cron/lastrun/cron.weekly
30 5  1 * *     root    rm -f /var/spool/cron/lastrun/cron.monthly
#*/10  *  * * * root    test -x /usr/sbin/run-crons && /usr/sbin/run-crons

(ez speciel vixie-cron crontab fájl, de a felépítése mindegyiknek azonos)

A kommentek utáni első sorokban vannak meghatározva az alapértelmezett beállítások (a shell, környezeti változók, vagy hogy kit értesítsen levélben a történésekről). Ezek után jön egy általános időzítéslista. Egy feladat első 5 paramétere az időzítést határozza meg, majd utánna jön, hogy kinek a nevében fusson, és végül maga az alkalmazás.

perc     óra       nap      hónap  hétnapja           felhasználó          program

(0-59) (0-23) (1-30/31) (1-12)   (0-6)

A crontab-ban látható alapértelmezett feladatok megkönnyítik az alkalmazás használatát. Léteznek az /etc könyvtár alatt különböző cron almappák (cron.hourly, cron.daily, cron.weekly, cron.monthly). Ha ezek valamelyikében elhelyezünk bash szkripteket, le fognak futni a könyvtárnevében szereplő időközönként. Eme könyvtárakba természetesen csak a rendszergazda tud elhelyezni feladatokat.

crontab

Létezik a cronnak felhasználók számára is elérhető funkciója. Telepítésekor létrehoz egy csoportot (cron, crontab, vagy egyéb cron-ra utaló név), amely csoport tagjai képesek saját feladatlistákat (crontab-ot) készíteni maguknak. Ehhez természetesen a csoport tagjának kell lennünk (illetve nevünknek nem szabad szerepelnie az /etc/cron.deny fájlban, úgyanis az ott található felhasználóknak tiltott a cron használata, még hogy ha a csoport tagjai is). A saját feladatlistánkat (amely a /var/spool/cron/crontabs/$USER alatt található) a crontab -l paranccsal tudjuk lekérdezni.

Kód:
crontab -l

 

Idézet
# DO NOT EDIT THIS FILE – edit the master and reinstall.
# (/tmp/crontab.XXXXYtf6jb installed on Mon Apr 24 15:10:45 2006)
# (Cron version V5.0 — $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
0,30 * * * * /bin/yasuc

Megkaptuk a már létező feladatlistánkat. Egy yasuc nevű programot futtatunk le félóránként. A crontab-unkat a crontab -e paranccsal tudjuk szerkeszteni. Alapértelmezetten a VI szövegszerkesztő nyitja meg ezt, aki jobban szereti az mcedit-et például, az állítsa át a szerkesztőt előtte (export EDITOR=mcedit).

Kód:
crontab -e

 

Példák

Néhány példával prezentálom az időzítések szerkesztésének szintaxisát:

1, Szeretnénk egy alfa nevű programot óránként lefuttatni a cron segítségével a háttérben:

Idézet
1 * * * * /usr/local/bin/alfa

(magyarázat: minden megkezdett óra első percében, a hónap minden napján fusson le az alfa)

2, Minden héten vasárnap, délután 4 óra 5perckor fusson le a tripwire nevű alkalmazás:

Idézet
5 16 * * 0 /usr/sbin/tripwire –check

(magyarázat: 16 óra 05kor, minden hónapban, a hét (0.) napján azaz vasárnap)

3, Minden hónapban egyszer futtatunk egy beta nevű programot a háttérben:

Idézet
40 10 2 * * /usr/local/bin/beta

(magyarázat: 10 óra 40 perckor, a hónapban minden második napján)

Megadhatunk több időpontot is egy bejegyzésben:

4, A tripwire ne hetente egyszer, hanem hetente kétszer fusson le:

Idézet
5 16 * * 0,4 /usr/sbin/tripwire –check

(magyarázat: 16 óra 05kor, minden hónapban, a hét (0.-ik és 4.-ik) napján azaz vasárnap, és csütörtökön)

5, Minden hónapban háromszor futtassuk a beta nevű programot:

Idézet
40 10 2,12,22 * * /usr/local/bin/beta

(magyarázat: 10 óra 40 perckor, a hónap minden második, tizenkettedik és huszonkettedik napján)