Упатство:Вовед во Cron: Разлика помеѓу преработките
Нема опис на уредувањето |
|||
Ред 192: | Ред 192: | ||
0 3 * * * /scripts/rotiraj-log >> log.file 2>&1 | 0 3 * * * /scripts/rotiraj-log >> log.file 2>&1 | ||
[[Category: | [[Category:Администрирање]] |
Преработка од 16:28, 17 мај 2006
Cron
Cron е програма којашто овозможува автоматско извршување на команди, скрипти (група од команди) во точно определено време.
Како се стартува cron?
Cron е демон, што значи дека се стартува само еднаш за да потоа чека додека од него не биде побарано извршување на некое барање. Пример, веб серверот е демон, којшто чека барање за приказ на одредена веб страна. Cron демонот, или crond, e неактивен се до времето кое е специфицирано во еден од неговите конфигурациски датотеки - crontabs.
Во најголемиот број на GNU/Linux дистрибуции, crond е автоматски инсталиран и е дел од почетните (start up) скрипти. За да видите дали е подигнат, внесете ја следнава наредба:
[saso@marco saso]$ ps aux | grep crond
root 1681 0.0 0.2 1944 508 ? S Dec15 0:00 crond saso 15034 0.0 0.2 4492 508 pts/26 S 14:17 0:00 grep crond
Првата линија покажува дека crond е подигнат, а втората линија е пребарувањето кое што го зададовме.
Ако не е подигнат, тоа може да се направи со crond. Процесот автоматски ќе се префрли за работа во позадина. Од сега па во иднина после рестартирање на компјутерот, crond ќе биде подигнат. Доколку не сакаме да го рестартираме, неопходно е извршување на crond со root привилегии.
[saso@marco saso]$ crond
Најголемиот број на демони (пр.: httpd и syslogd) потребно е да бидат рестартирани по промена во нивните конфигурациски датотеки. Кај Cron тоа не е случај, промените автоматски се прифаќаат по внесувањето со crontab. Некои cron верзии вршат обнова на конфигурациските датотеки на секоја минута, некои бараат рестартирање. Во Fedora, RedHat и SuSe дистрибуциите овие промени се приложуваат во моментот на нивното снимање.
Употреба на cron
Има неколку различни начини на употребата на cron. Во /etc директориумот може да се најдат следниве под директориуми именувани како:
'cron.hourly', 'cron.daily', 'cron.weekly' and 'cron.monthly'. Ако поставите скрипта во еден од овие директориуми, таа ќе биде извршена часовно, неделно или месечно, во зависност од директориумот во кој се наоѓа.
За поголема флексибилност, можно е уредување на /etc/crontab датотеката. Во Fedora и RadHat дистрибуциите crontab датотеката изгледа вака:
[saso@marco /]$ cat /etc/crontab
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/
# run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 12 4 * * 0 root run-parts /etc/cron.weekly 22 4 1 * * root run-parts /etc/cron.monthly 32 4 * * * root run-parts /etc/cron.rotate
Да го разгледаме вториот дел од датотеката. Секоја линија е сочинета од серија на повеќе полиња одделени со празно место.
Полињата се:
minute hour dom month dow user command
minute - Параметар кој ги контролира минутите во еден час. Вредноста е помеѓу 0 и 59;
hour - Контрола за часот во кој се извршува командата (24 часовен облик). Вредноста е помеѓу 0 и 23 (0 е полноќ);
dom - Ден во месецот. Вредноста е помеѓу 1 и 31;
month - Месец во годината. Вредноста е помеѓу 1 и 12 (претставено нумерички)или текстуално на англиски јазик со користење на првите три букви(Jan – Dec);
dow - Овој параметер означува ден во неделата. Вредноста е помеѓу 0 и 7. Денот недела се означува како 0 или 7 или текстуално на англиски јазик со користење на првите три букви од денот(Mon – Sun);
user - Името на корисникот со кое се извршува командата;
command - Ова е самата команда којашто сакаме да ја извршиме. Ова поле може да содржи повеќе наредби според правилот за извршување на наредби внесени во една линија;
Доколку не сакате некоја од овие променливи полиња да ги специфицирате, во тој случај ставете ѕвезда ‘*’.
На пример:
01 * * * * root echo ”Hello”
Испис на зборот “Hello” секој час во 01 минута.
17 20 * * * root date
Приказ на системското време секој ден во 20:17.
00 4 * * 0 root rm –fr /tmp/*
Оваа команда (безусловно рекурзивно бришење на сите датотеки во /tmp/ директориумот) ќе биде извршена секоја недела во 4 часот наутро.
Кога двете полиња dom и dow се внесени, командата се извршува кога било кој од двата услова е исполнет.
Пример:
* 12 16 * 1 root /scripts/backup-make
Условите во полињата налагаат извршување на оваа наредба секој понеделник и секој 16-ти на пладне. Истиот резултат би го добиле ако се употребат следниве две наредби:
* 12 16 * * root /scripts/backup-make * 12 * * 1 root /scripts/backup-make
Самите параметри во полињата може да бидат и листа од параметри одделени со запирака, или интервал со користење на цртичка.
Пример:
59 11 * * 1,2,3,4,5 root /scripts/proverka.sh
Ќе се изврши во 11:59 секој понеделник, вторник и среда. Истото би го добиле и со:
59 11 * * 1-5 root /scripts/proverka.sh
Cron исто така подржува и употреба на 'step' варијабли.
Вредноста */2 во dom полето, значи дека командата ќе се извршува секој втор ден, а */5 во полето за минути овозможува извршување на секои пет минути.
Пример:
* 12 10-16/2 * * root backup.sh
е исто со:
* 12 10,12,14,16 * * root backup.sh
*/15 9-17 * * * root reset-adsl.test
Секои 15 минути помеѓу 9 и 15 часот.
Коментари се дозволени во crontab, но тие мора да започнат со '#';
Мултикориснички cron
Сите Unix базирани оперативни системи се мултикориснички. Cron е апликација која е поддржана од ваквите оперативни системи. Секој од корисниците може да имаат свој crontab којшто може да биде менуван, уредуван и избришан од корисникот. Crontab датотеките се наоѓаат најчесто во /var/spool/cron/ (RedHat, Fedora) или во /var/cron/tabs/ (SuSe).
За уредување (или креирање) на лична crontab датотека се користи командата, crontab -e
Личната crontab датотека го има потполно истиот облик како и основната /etc/crontab со исклучок на променливата MAILTO во првиот дел од датотеката која и не е неопходна за функционирање на crontab.
Во овој случај, кај мултикоричка употреба на crontab не е задолжителна употребата на корисничкото поле во crontab наредбите.
Доколку сакате можно е и уредување на crontab без употреба на crontab –e наредбата. Со уредувач на текст креираме датотека која со crontab наредба ја предаваме на crontab активната датотека. На пример доколку креираме датотека со име sasocron.test, неопходно е користење на:
[saso@marco /]$ crontab sasocron.test
Други корисни наредби околу crontab се:
[saso@marco /]$ crontab –l
преглед на моменталниот crontab, и
[saso@marco /]$ crontab –r
за бришење на crontab.
Корисниците со root привилегии може да уредуваат туѓи crontab датотеки со употреба на:
[saso@marco /]$ crontab -u
по што следи името на корисникот и соодветната команда -e, -l или -r.
Контрола на пристап до Cron
Cron има можност за ограничување на пристапот до crontab. Ова е овозможено со употреба на /etc/cron.allow и /etc/cron.deny датотеките. Овие датотеки работат на ист начин како и allow/deny датотеките кај другите демони (пр. httpd, squid). За да забраните одреден корисник да има пристап до crontab доволно е да се стави неговото име во cron.deny, за овозможување на употреба на crontab ставете го корисничкото име во cron.allow. Доколку сакате на сите корисници да им биде забрането користењето на crontab, внесете ALL во cron.deny датотеката:
[root@marco etc]$ echo ALL >>/etc/cron.deny
Доколку сакате да овозможите корисникот saso да користи crontab, направете го следново:
[root@marco etc]$ echo saso >>/etc/cron.allow
Доколку не постои cron.allow или cron.deny датотеката, тогаш употребата на crontab е дозволено за сите корисници.
Излезни параметри на Cron
Излезните параметри од cron се праѓаат како mail пораки до корисникот со кој е извршена комнадата, или до корисникот кој е посочен во MAILTO параметарот.
Но тоа не е единствен избор. Можно е креирање на логови, текстуални датотеки, коишто може во иднина да служат и како референца за анализа или преглед на успешно односно неуспешно извшување на командите посочени во цронтаб.
Доколку сакаме излезните параметри од cron да бидат пратени на емаил до некој корисник што не е дел од постоечкиот компјутерски систем можно е користење на целосни e-mail адреси.
Следи пример за двата случаи:
0 16 * * 5 /scripts/vikend.sh | mail -s "VIKEND" saso
и
0 16 * * 5 /scripts/vikend.sh | mail -s "VIKEND" sstojanovski@mt.net.mk
Доколку имате наредба која се извршува многу често и не сакате секојпат cron да дава излезна вредност за таа наредба може излезот да го насочите во /dev/null.
0 0 1 * * /scripts/sinhroniziraj > dev/null
Редирекцијата на излезните параметри од командите во crontab се можни и во датотека:
0 3 * * * /scripts/rotiraj-log >> log.file
Забележете ја употребата на двојниот “>“ знак, со цел да не дојде до пребришување на старата содржина во log.file датотеката.
Досегашните примери вршеа редирекција на стандарниот излез од crontab наредбите, но не и на стандарната грешка. За да се запише целосниот излез се користи “2>&1”
0 3 * * * /scripts/rotiraj-log >> log.file 2>&1