cron

Поделись знанием:
(перенаправлено с «Crontab»)
Перейти к: навигация, поиск





cron — классический демон-планировщик задач в UNIX-подобных операционных системах, использующийся для периодического выполнения заданий в определённое время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные директории. В системах на базе systemd фактически замещен встроенным в него механизмом systemd.timer.

Файлы crontab, создаваемые для отдельных пользователей, находятся в каталоге[1] /usr/spool/cron/crontabs/ или /var/spool/cron/tabs/. Редактировать их вручную не рекомендуется, для этого используют команду crontab -e. Файлы crontab, используемые для управления всей системой, располагаются в директории /etc/cron.d/. Кроме того, в директориях /etc/cron.daily/, /etc/cron.weekly/ и /etc/cron.monthly/ размещаются автоматически запускаемые программы (ежедневно, еженедельно или ежемесячно).

Основной файл конфигурации cron, /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 )
#

crontab

Каждый пользователь системы имеет свой файл заданий crontab, в котором описано, в какое время и какие программы запускать от имени этого пользователя. Для редактирования файла crontab используется специальная одноимённая программа crontab, позволяющая не прерывать процесс cron на время редактирования.

Вывести содержимое текущего файла расписания:

crontab -l

Удаление текущего файла расписания:

crontab -r

Для редактирования файла crontab вашего пользователя используется команда[2]:

crontab -e

Таблица crontab состоит из 6 колонок, разделяемых пробелами или табуляторами. Первые пять колонок задают время выполнения (Минута, Час, День, Месяц, День недели), в них может находиться число, список чисел, разделённых запятыми, диапазон чисел, разделённых дефисом, символы '*' или '/'. В системных файлах crontab после полей времени указывается пользователь, от которого запускается команда. Все остальные символы в строке интерпретируются как выполняемая команда с её параметрами. Если команда отправляет какой-нибудь текст в стандартный вывод, этот текст отправляется по e-mail пользователю.

* * * * * выполняемая команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)

Пример файла crontab:

 # как обычно, с символа '#' начинаются комментарии
 # в качестве командного интерпретатора использовать /bin/sh
 SHELL=/bin/sh
 # результаты работы отправлять по этому адресу
 MAILTO=paul@example.org
 # добавить в PATH домашний каталог пользователя
 PATH=/bin:/usr/bin:/home/paul/bin
 
 #### Здесь начинаются задания
 # выполнять каждый день в 0 часов 5 минут, результат складывать в log/daily
 5 0 * * * $HOME/bin/daily.job >> $HOME/log/daily 2>&1
 # выполнять 1 числа каждого месяца в 14 часов 15 минут
 15 14 1 * * $HOME/bin/monthly
 # каждый рабочий день в 22:00
 0 22 * * 1-5 echo "Пора домой" | mail -s "Уже 22:00" john
 
 23 */2 * * * echo "Выполняется в 0:23, 2:23, 4:23 и т. д."
 5 4 * * sun echo "Выполняется в 4:05 в воскресенье"
 0 0 1 1 * echo "С новым годом!"
 15 10,13 * * 1,4 echo "Эта надпись выводится в понедельник и четверг в 10:15 и 13:15"
 0-59 * * * * echo "Выполняется ежеминутно"
 0-59/2 * * * * echo "Выполняется по четным минутам"
 1-59/2 * * * * echo "Выполняется по нечетным минутам"
 # каждые 5 минут
 */5 * * * * echo "Прошло пять минут"
 # каждое первое воскресенье каждого месяца. -eq 7 это код дня недели, т.е. 1 -> понедельник , 2 -> вторник и т.д.
 0 1 1-7 * * [ "$(date '+\%u')" -eq 7 ] && echo "Эта надпись выводится каждое первое воскресенье каждого месяца в 1:00"

Особенности

  • Все условия (времени запуска) проверяются по «логическому И», кроме условий «день недели» и «день месяца» — указанные совместно, они обрабатываются по «логическому ИЛИ», то есть «по любому из дней», что отражено в документации (Ubuntu, Debian, FreeBSD). Однако, такая логика неочевидна и не позволяет создать условие типа «первый понедельник каждого месяца» или «каждую пятницу в 13 число». Разработчики не изменяют данное поведение, считая его стандартом.[3]
  • Все файлы crontab должны завершаться пустой строкой, иначе будет проигнорировано последнее правило либо весь файл.
  • Команды файла crontab используют стандартный синтаксис командной оболочки, но их нельзя разделить на несколько строк.
  • Запускаемые файлы в автоматически сканируемых директориях, таких как /etc/cron.daily/, игнорируются, если их имя содержит точку.
  • Синтаксис crontab, используемый для запуска раз в несколько минут со сдвигом, может привести к неожиданным результатам. Так, запись 1-56/5 * * * * не будет совершать запуск по 01-й минуте каждого часа; для срабатывания «каждые 5 минут начиная с 1-й минуты часа» следует использовать формат 1-59/5 * * * * или 1,6,11,16,21,26,31,36,41,46,51,56 * * * *.
  • Символ '%' в команде запуска используется для передачи перевода строки в команду (если не экранирован). Следующий за ним текст команды передаётся запускаемой программе не как параметры командной строки, а через стандартный вход.
  • Вывод запускаемых команд отправляется пользователю, от имени которого производился запуск. Если в файле crontab до команды расположена директива MAILTO=<new@email>, то выводимые данные будут отправляться на указанный адрес.

Графический интерфейс

Для удобства пользователей во многих системах есть специальные программы графического интерфейса управления cron.

Gnome Schedule

Для основанных на Debian дистрибутивов:

  • Установка: sudo apt-get install gnome-schedule
  • Запуск: Applications → System tools → Schedule [ubuntugeek.com/schedule-tasks-using-gnome-schedule-a-cron-at-gui-in-ubuntu.html]

Kcron

Kcron представляет собой KDE-интерфейс для редактирования конфигурационных файлов cron. Утилита запускается по Alt+F2, в окне редактирования можно указать мышью:

  • полный путь к выполняемому файлу программы
  • нужное время запуска программы
  • переменные окружения, необходимые во время исполнения программы

Сходные программы

  • NnCron — планировщик для Windows
  • Task Scheduler — планировщик задач Windows и его консольная утилита schtasks.exe
  • at — однократный запуск программ в заданное время.
  • anacron — периодический запуск программ, не обязательно в точности в заданное время: например если в указанное в задании время машина была выключена anacron выполнит задание позже
  • inetd — запуск программ обслуживания сетевых запросов
  • upstart — запуск программ обслуживания событий (обобщение cron, atd, anacron, inetd)

Напишите отзыв о статье "Cron"

Примечания

  1. [www.citforum.ru/operating_systems/manpages/CRON.1.shtml Man cron]
  2. [help.ubuntu.com/community/CronHowto Cron Howto]
  3. [bugs.debian.org/cgi-bin/bugreport.cgi?bug=460070 Ссылка на обсуждение в баг-трекере Debian]

Ссылки

  • [www.citforum.ru/operating_systems/manpages/CRON.1.shtml Man: cron] — руководство по cron
  • [www.opennet.ru/man.shtml?topic=crontab&category=5 Man: crontab(5)] — руководство по командам crontab
  • [www.ibm.com/developerworks/ru/library/l-job-scheduling/ Планирование задач с помощью cron и at]
  • [phpanel.ru/9448/instr3_8.shtml Небольшой FAQ по cron ]
  • [www.codenet.ru/webmast/php/cron.php Использование CRON и команды crontab]
  • [sgww.livejournal.com/7856.html Шпаргалка по CRON]
  • [www.chuvyr.ru/2013/11/cron.html Как запускать PHP-скрипты по расписанию используя CRON]


Отрывок, характеризующий Cron

Княжна Марья покраснела пятнами и замолчала, как будто она чувствовала себя виноватою.
– Я ничего не говорил тебе, а тебе уж говорили . И мне это грустно.
Красные пятна еще сильнее выступили на лбу, шее и щеках княжны Марьи. Она хотела сказать что то и не могла выговорить. Брат угадал: маленькая княгиня после обеда плакала, говорила, что предчувствует несчастные роды, боится их, и жаловалась на свою судьбу, на свекра и на мужа. После слёз она заснула. Князю Андрею жалко стало сестру.
– Знай одно, Маша, я ни в чем не могу упрекнуть, не упрекал и никогда не упрекну мою жену , и сам ни в чем себя не могу упрекнуть в отношении к ней; и это всегда так будет, в каких бы я ни был обстоятельствах. Но ежели ты хочешь знать правду… хочешь знать, счастлив ли я? Нет. Счастлива ли она? Нет. Отчего это? Не знаю…
Говоря это, он встал, подошел к сестре и, нагнувшись, поцеловал ее в лоб. Прекрасные глаза его светились умным и добрым, непривычным блеском, но он смотрел не на сестру, а в темноту отворенной двери, через ее голову.
– Пойдем к ней, надо проститься. Или иди одна, разбуди ее, а я сейчас приду. Петрушка! – крикнул он камердинеру, – поди сюда, убирай. Это в сиденье, это на правую сторону.
Княжна Марья встала и направилась к двери. Она остановилась.
– Andre, si vous avez. la foi, vous vous seriez adresse a Dieu, pour qu'il vous donne l'amour, que vous ne sentez pas et votre priere aurait ete exaucee. [Если бы ты имел веру, то обратился бы к Богу с молитвою, чтоб Он даровал тебе любовь, которую ты не чувствуешь, и молитва твоя была бы услышана.]
– Да, разве это! – сказал князь Андрей. – Иди, Маша, я сейчас приду.
По дороге к комнате сестры, в галлерее, соединявшей один дом с другим, князь Андрей встретил мило улыбавшуюся m lle Bourienne, уже в третий раз в этот день с восторженною и наивною улыбкой попадавшуюся ему в уединенных переходах.
– Ah! je vous croyais chez vous, [Ах, я думала, вы у себя,] – сказала она, почему то краснея и опуская глаза.
Князь Андрей строго посмотрел на нее. На лице князя Андрея вдруг выразилось озлобление. Он ничего не сказал ей, но посмотрел на ее лоб и волосы, не глядя в глаза, так презрительно, что француженка покраснела и ушла, ничего не сказав.
Когда он подошел к комнате сестры, княгиня уже проснулась, и ее веселый голосок, торопивший одно слово за другим, послышался из отворенной двери. Она говорила, как будто после долгого воздержания ей хотелось вознаградить потерянное время.
– Non, mais figurez vous, la vieille comtesse Zouboff avec de fausses boucles et la bouche pleine de fausses dents, comme si elle voulait defier les annees… [Нет, представьте себе, старая графиня Зубова, с фальшивыми локонами, с фальшивыми зубами, как будто издеваясь над годами…] Xa, xa, xa, Marieie!
Точно ту же фразу о графине Зубовой и тот же смех уже раз пять слышал при посторонних князь Андрей от своей жены.
Он тихо вошел в комнату. Княгиня, толстенькая, румяная, с работой в руках, сидела на кресле и без умолку говорила, перебирая петербургские воспоминания и даже фразы. Князь Андрей подошел, погладил ее по голове и спросил, отдохнула ли она от дороги. Она ответила и продолжала тот же разговор.
Коляска шестериком стояла у подъезда. На дворе была темная осенняя ночь. Кучер не видел дышла коляски. На крыльце суетились люди с фонарями. Огромный дом горел огнями сквозь свои большие окна. В передней толпились дворовые, желавшие проститься с молодым князем; в зале стояли все домашние: Михаил Иванович, m lle Bourienne, княжна Марья и княгиня.
Князь Андрей был позван в кабинет к отцу, который с глазу на глаз хотел проститься с ним. Все ждали их выхода.
Когда князь Андрей вошел в кабинет, старый князь в стариковских очках и в своем белом халате, в котором он никого не принимал, кроме сына, сидел за столом и писал. Он оглянулся.
– Едешь? – И он опять стал писать.
– Пришел проститься.
– Целуй сюда, – он показал щеку, – спасибо, спасибо!
– За что вы меня благодарите?
– За то, что не просрочиваешь, за бабью юбку не держишься. Служба прежде всего. Спасибо, спасибо! – И он продолжал писать, так что брызги летели с трещавшего пера. – Ежели нужно сказать что, говори. Эти два дела могу делать вместе, – прибавил он.
– О жене… Мне и так совестно, что я вам ее на руки оставляю…
– Что врешь? Говори, что нужно.
– Когда жене будет время родить, пошлите в Москву за акушером… Чтоб он тут был.
Старый князь остановился и, как бы не понимая, уставился строгими глазами на сына.
– Я знаю, что никто помочь не может, коли натура не поможет, – говорил князь Андрей, видимо смущенный. – Я согласен, что и из миллиона случаев один бывает несчастный, но это ее и моя фантазия. Ей наговорили, она во сне видела, и она боится.
– Гм… гм… – проговорил про себя старый князь, продолжая дописывать. – Сделаю.
Он расчеркнул подпись, вдруг быстро повернулся к сыну и засмеялся.
– Плохо дело, а?
– Что плохо, батюшка?
– Жена! – коротко и значительно сказал старый князь.
– Я не понимаю, – сказал князь Андрей.
– Да нечего делать, дружок, – сказал князь, – они все такие, не разженишься. Ты не бойся; никому не скажу; а ты сам знаешь.
Он схватил его за руку своею костлявою маленькою кистью, потряс ее, взглянул прямо в лицо сына своими быстрыми глазами, которые, как казалось, насквозь видели человека, и опять засмеялся своим холодным смехом.
Сын вздохнул, признаваясь этим вздохом в том, что отец понял его. Старик, продолжая складывать и печатать письма, с своею привычною быстротой, схватывал и бросал сургуч, печать и бумагу.
– Что делать? Красива! Я всё сделаю. Ты будь покоен, – говорил он отрывисто во время печатания.
Андрей молчал: ему и приятно и неприятно было, что отец понял его. Старик встал и подал письмо сыну.
– Слушай, – сказал он, – о жене не заботься: что возможно сделать, то будет сделано. Теперь слушай: письмо Михайлу Иларионовичу отдай. Я пишу, чтоб он тебя в хорошие места употреблял и долго адъютантом не держал: скверная должность! Скажи ты ему, что я его помню и люблю. Да напиши, как он тебя примет. Коли хорош будет, служи. Николая Андреича Болконского сын из милости служить ни у кого не будет. Ну, теперь поди сюда.
Он говорил такою скороговоркой, что не доканчивал половины слов, но сын привык понимать его. Он подвел сына к бюро, откинул крышку, выдвинул ящик и вынул исписанную его крупным, длинным и сжатым почерком тетрадь.
– Должно быть, мне прежде тебя умереть. Знай, тут мои записки, их государю передать после моей смерти. Теперь здесь – вот ломбардный билет и письмо: это премия тому, кто напишет историю суворовских войн. Переслать в академию. Здесь мои ремарки, после меня читай для себя, найдешь пользу.
Андрей не сказал отцу, что, верно, он проживет еще долго. Он понимал, что этого говорить не нужно.
– Всё исполню, батюшка, – сказал он.
– Ну, теперь прощай! – Он дал поцеловать сыну свою руку и обнял его. – Помни одно, князь Андрей: коли тебя убьют, мне старику больно будет… – Он неожиданно замолчал и вдруг крикливым голосом продолжал: – а коли узнаю, что ты повел себя не как сын Николая Болконского, мне будет… стыдно! – взвизгнул он.