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.
# 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).
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:
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:
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:
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:
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:
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)
További dokumentációk a manuál oldalakban találhatóak (
man cron,
man crontab).