Использование cron

Сегодня я хочу рассказать Вам о том, как пользоваться утилитой cron. Понимаю, что многие скажут — «Нафига это надо. Читайте маны. Уже много раз написано.», но все таки, думаю, что многие еще не разобрались с этим делом, да и еще одна дока лишней не будет.

Cron — это утилита, которая позволяет запускать некоторые скрипты (задания) в определенное время (не только единоразово, но и периодически).  Таким образом, cron — это своего рода планировщик заданий.

Конфигурируется он довольно просто. Есть основной файл crontab (обычно располагается в каталоге /etc), где прописываются задания, которые будут выполняться. По умолчанию он имеет вид:

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 )
#

При детальном рассмотрении мы видим упоминание каталогов «/etc/cron.*». Давайте пока разберемся с синтаксисом времени, а уж потом вернемся к каталогам. Синтаксис используется следующий:

Минуты Часы День_месяца Месяц День_недели Пользователь Команда

Т.е. запись

17 *    * * *   root    cd / && run-parts —report /etc/cron.hourly

буквально означает следующее — в 17 минут каждого часа (знак *) и каждого дня запускать команду «cd / && run-parts —report /etc/cron.hourly» от имени пользователя root.

Отсюда становится понятно назначение каталогов:

  • cron.hourly — каталог, содержащий задания, запускаемые ежечасно.
  • cron.daily — каталог, содержащий задания, запускаемые ежедневно.
  • cron.weekly — каталог, содержащий задания, запускаемые еженедельно.
  • cron.monthly — каталог, содержащий задания, запускаемые ежемесячно.

В данном случае, в качестве заданий используются запускаемые скрипты или программы, которые размещают в этих каталогах.

Для примера поставим задачу. Нам необходимо запускать скрипт /home/user/script.sh каждые 3 часа от имени пользователя «user». Формируем базовую строку:

* * * * * user /home/user/script.sh

Теперь ее исправляем до нужного нам состояния, т.е. указываем, что скрипт будет выполняться каждые 3 часа в 0 минут часа каждую субботу и воскресенье:

0 */3 * * 0,6 user /home/user/script.sh

Или же можно записать иначе:

0 0,3,6,9,12,15,18,21 * * 6,7 user /home/user/script.sh

что, в принципе, равнозначно. Вы наверное спросите почему опечатка в днях недели. Я отвечу, что воскресенье может указываться как 0 (американский стандарт), так и 7 (Российский стандарт).

Для более полной картины приведу вырезку из «man 5 crontab»:

field          allowed values
-----          --------------
minute         0-59
hour           0-23
day of month   1-31
month          1-12 (or names, see below)
day of week    0-7 (0 or 7 is Sun, or use names)

Думаю, что переводить этот кусок особого смысла не имеет, т.к. и так все понятно.

Кроме того, есть еще один каталог, который может быть весьма полезен пользователям, у которых есть SSH-доступ на сервер, но нет root-прав. Это каталог /var/spool/cron, где располагаются индивидуальные пользовательские задания. На пример, Вам необходимо добавить в крон задание, но прав на правку crontab-файла нет. Создаем в домашнем каталоге (или любом другом) файл cron примерно такого содержания:

SHELL=/bin/bash
MAILTO=user
0-59 * * * * /home/user/script.sh

Выполняем команду:

crontab /home/user/cron

в результате чего в каталоге /var/spool/cron появляется файл с именем пользователя, в данном случае user, и содержимым файла /home/user/cron.

Для просмотра списка заданий можно использовать команду «crontab -l», для удаления — «crontab -r», для правки — «crontab -e».

Вот собственно и все. Не все так сложно, как кажется на первый взгляд.

Вы можете оставить комментарий, или поставить трэкбек со своего сайта.

8 комментариев(я)

  • 13.05.2008 18:40, selivan сказал:

    Поставь fcron, на cron потом смотреть не захочестя

    • 13.05.2008 20:14, Silver Ghost сказал:

      Хм… Спасибо. Посмотрю и озвучу мнение в следующем подкасте.

      (Обязательно)
      (Обязательно, не публикуется)

      Я пришел к тебе с дискетой - рассказать, что сеть упала
      Яндекс.Метрика beget