Cron мастер немесе қайталанатын тапсырмаларды жобалау

Cron — linux жүйесіндегі тапсырмаларды жобалау құралы. Егер сізге белгілі бір уақыт сайын (бір сағат сайын, күнара, айдың белгілі бір күнінде және т.с.с.) команда орындау қажет болса, оны cron арқылы істеуге болады. Көпшілік сайты барлар оның php үшін пайдаланылатынын жақсы біледі. Осы мақалада cron баптауларының кейбір пайдаланылу жолдарын қарап көрейік.

Негізі cron бұл жобалаушы демон және оның барлық баптаулары crontab файлдарында сақталады. Crontab файлдарында біздің командаларымызды көрсете аламыз. Linux жүйесінде /etc/crontab файлын ашатын болсақ:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab' command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
 17 *  *   *   *  root   cd / && run-parts --report /etc/cron.hourly
 25 6  *   *   *  root   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
 47 6  *   *   7  root   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
 52 6  1   *   *  root   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#


Бастапқыда файл мүлдем түсініксіз. Бірақ байқап қарасаңыз баптаулар арнайы синтаксисте (форматта) жазылған. Бұл формат қарапайым және кез-келген қажет нәтижені алуға көмектеседі. Жалпы әрбір жобаланған команда (скрипт) келесі форматта жазылады:

 # ┌───────────── минут (0 - 59)
 # │ ┌────────────── сағат (0 - 23)
 # │ │ ┌─────────────── ай күні (1 - 31)
 # │ │ │ ┌──────────────── ай (1 - 12)
 # │ │ │ │ ┌───────────────── апта күні (0 - 6) (0 - жексенбі және солай ретпен, 6 - сенбі, 7 саны да жексенбіні көрсетеді)
 # │ │ │ │ │
 # │ │ │ │ │
 # * * * * *  орындалатын команда немесе скрипт


Яғни, бастапқы 5 бағана белгілі бір уақыт бірлігін көрсетеді. Егер оның орнында жұлдызша тұрса, ол осы уақыт бірлігінің барлығы дегенді білдіреді. Мысалыға, күніге сағат таңғы 6:30-да компьютерді өшіріп қосу керек болсын, оны келесі әдіспен орындаймыз:

30 6 * * * shutdown -r now


Сіз өзіңіздің тапсырмаларыңызды "crontab -e" командасы арқылы өңдей аласыз. Команданы орындаған кезіңізде сіздің баптауларыңыз ашылады. Қосылып тұрған тапсырмаларды қарау үшін "crontab -l" орындау керек. Енді мысалдарды ары қарай қарастырайық.

Ал егер тек жексенбі күні өшіріп қосу керек болса:
30 6 * * 0 shutdown -r now


Дүсенбі және жексенбі күні ғана керек болса:
30 6 * * 0,1 shutdown -r now


Яғни, әр бағанда үтір арқылы бірнеше мәнді көрсетуге болады. Тағы бір тамаша нәрсе ол диапазон көрсету мүмкіндігі. Жоғарыдағы мысалды қайта аламыз, бізге компьютерді айдың 1-нен бастап 15-не дейін және дүйсенбіден жұмаға дейін өшіріп қосу керек болса:
30 6 1-15 * 0-5 shutdown -r now


Тағы бір мысал, көп жағдайда сайттарда 15 минут сайын email хабарлама жіберіп тұру керек, оны былай жасауға болады:
15 * * * * php /path/to/script/send-mail.php


Күніге түнде бэкап алу:
30 12 * * * /path/to/script/backup.sh


Қарастырылған мысалдарда тағы бір мүмкіндік жетпейді. Егер мен әр үш күн сайын компьютерді өшіріп қосуым керек болса қалай жазуым керек? Оны былай жасауға болады:
* * */3 * * shutdown -r now


*/3 — үш күн сайын дегенді білдіреді. Мұндай форматты басқа бағандарда да пайдалануға болады. Мысалы, әр 25 минут сайын "*/25" деп бірінші бағанға жаза аламыз.

Осылайша мысалдарды жалғастыра беруге болады. Бірақ осының өзі түсінікті деп ойлаймын, одан да crontab-тың басқа файлдарын да қарайық. Баптауды /etc/crontab файлынан басқа /etc/cron.d/ папкасында жүргізуге болады. Ол папкаға тура /etc/crontab секілді файлдар салынады, ол сіздің баптауларыңызды жеке ұстауға көмектеседі. Мысалы, /etc/cron.d/comp-restart деген файл құрып оған былай жазамыз:
# әр жексенбі күні компьютерді өшіріп қосатын тапсырма
0 12 * * 7 shutdown -r now
#


# символы арқылы комментарийлар жазылады (түсініктемелер). Файлдың соңындағы "#"-тан басталатын бос қатарға назар аударыңыз. crontab ескі нұсқалары егер файлдың соңында бос қатар болмаса баптауларды дұрыс оқи алмайды. Сондықтан соңында осындай бос қатар қалдырып отырған дұрыс.

Тек енді cron-ға баптаулар өзгергенін айту керек, ол үшін келесі команданы орындаңыз:
service cron reload


Күніге, сағат сайын, апта сайын, ай сайын тапсырмаларды орындау өте көп қолданылатындықтан, олар үшін арнайы папкалар бар:
  • /etc/cron.hourly — сағат сайын
  • /etc/cron.daily — күн сайын
  • /etc/cron.weekly — апта сайын (жексенбі күні)
  • /etc/cron.monthly — апта сайын (1-ші күні)

Бұл папкаларға орындалатын скриптті салып қою жеткілікті, яғни, crontab файлын баптап жүрудің (сонымен бірге, reload жасаудың да) қажеті жоқ.

  • +1
0 пікір
Тек тіркелген қолданушылар ғана пікір қалдыра алады.