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

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

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Post to Twitter Post to Delicious Post to Facebook Post to MySpace Post to Ping.fm

Оценить эту запись:
1 звезда2 звезды3 звезды4 звезды5 звезд
Метки: [ , , ]
Вы можете следить за ответами к этой записи через RSS 2.0 feed. Вы можете оставить мнение, или трэкбэк с собственного сайта.

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

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