Использование 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 сказал:

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

      • 31.03.2009 01:23, Dmitry сказал:

        Хорошая статья!!!!
        Вот тоже не плохо написано про это:
        unixblog.org.ua

        • 27.01.2010 20:27, Wincert сказал:

          Как в Ubuntu сохранять задания crontab?

          • 28.01.2010 14:57, Silver Ghost сказал:

            В файле crontab?

            • 29.01.2010 12:59, Wincert сказал:

              Нет, в командной строке crontab -e , потом ввожу свое задание, а сохранить не знаю как. Как?

              • 29.01.2010 13:18, Silver Ghost сказал:

                Смотря какой дистрибутив Линукса. В Ubuntu Ctrl+X.

                Там внизу подсказка есть. 

                • 14.02.2010 21:51, Dimka сказал:

                  Ctrl + O , затем жмешь enter, и фсе сохранено. Что выйти Ctrl + X

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

          Админ не заснул, он перегружается!