Crontab расписание. Crontab примеры

|

На сегодня Cron является одним из наиболее распространенных способов автоматизации запуска процессов в Linux. Cron – это демон, который работает в фоновом режиме и позволяет планировать и автоматизировать запуск различных (в том числе и связанных с поддержкой сервера) задач. Для этого используется конфигурационный файл кронтаб (crontab).

Установка Cron

На данный момент почти все дистрибутивы поставляются с уже установленным по умолчанию демоном cron. Если же cron не установлен по умолчанию, его можно быстро установить при помощи следующих команд:

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install cron

Cent OS/Red Hat Linux:

sudo yum update
sudo yum install vixie-cron crontabs

После завершения установки необходимо убедиться в том, что cron запущен в фоновом режиме:

sudo /sbin/chkconfig crond on
sudo /sbin/service crond start

Базовый синтаксис

Рассмотрим следующий пример задачи, запуск которой нужно спланировать:

5 * * * * curl http://www.google.com

Синтаксис планирования различных задач сначала может показаться запутанным. На самом деле он очень краток и прост, нужно просто разобраться, как его читать. Каждая строка делится на график и команду. В строку можно внести практически любую команду. График делится на 5 различных полей для планирования в следующем порядке:

<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>

Примеры использования cron

Данный раздел содержит примеры планирования наиболее общих задач.

Чтобы команда автоматически выполнялась каждую минуту:

Чтобы команда выполнялась каждую двенадцатую минуту часа (08.12, 09.12, и т.д.):

Чтобы команда запускалась каждые 15 минут:

0,15,30,45 * * * *

Чтобы команда автоматически выполнялась каждый день в 4 утра:

Чтобы команда выполнялась каждый вторник в 4 утра:

График можно делить. То есть, вместо 0,15,30,45 можно использовать:

Обратите внимание на диапазон 2-6. Данный синтаксис будет запускать указанную команду с 2.00 до 6.00 утра каждые 15 минут.

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

Настройка cron

Разработав график выполнения задач, необходимо поместить его в правильной точке системы, чтобы демон мог найти и прочесть его. В целом, таких точек в системе несколько, но, как правило, такой график помещают в crontab пользователя. Как уже говорилось, crontab – это конфигурационный файл демона cron, который содержит график запуска определенных команд и программ. Этот файл находится в /var/spool/cron/crontab, но его не принято редактировать напрямую. Для внесения в файл нужных программ используется одноименная команда – crontab. То есть, чтобы отредактировать файл crontab, можно просто ввести:

Эта команда откроет текстовый редактор, при помощи которого можно внести все необходимые изменения; каждую новую задачу нужно вносить в новую строку.

Чтобы просмотреть crontab, не внося никаких изменений, используйте команду:

Очистить crontab можно с помощью следующей команды:

Пользователь с повышенными привилегиями может редактировать crontab других пользователей при помощи:

crontab -u <пользователь> -e

Вывод cron

После выполнения задачи cron отправляет выходные данные на электронный адрес пользователя (если только вывод не нужно направить в лог или /dev/null). Адрес электронной почты можно указать вручную, внеся параметр MAILTO в верхнюю часть crontab. Также можно указать оболочку, которую нужно запускать, путь к двоичному файлу cron и домашнему каталогу. Для этого:

сначала откройте crontab:

затем отредактируйте его следующим образом:

SHELL=/bin/bash
HOME=/
MAILTO=”example@some_user.com”
#This is a comment
* * * * * echo ‘Run this command every minute’

Данная строка вернет Run this command every minute. Демон cron будет отправлять такой вывод на почту example@some_user.com. Это, конечно, не очень удобно. Как уже говорилось ранее, данный вывод можно направлять в лог-файл, чтобы избежать подобных ситуаций.

Для этого нужно просто добавить:

* * * * * echo ‘Run this command every minute’ >> file.log

Примечание: символы >> направят вывод в лог. Кроме логов можно также использовать /dev/null при помощи следующего PHP-скрипта, работающего в фоновом режиме.

* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1

Ограничение доступа к cron

Чтобы ограничить доступ к демону cron, нужно использовать файлы /etc/cron.allow и /etc/cron.deny. чтобы открыть (allow) или закрыть (deny) доступ определенному пользователю, нужно просто внести имя пользователя в соответствующий файл. По умолчанию демон cron доступен всем пользователям. Чтобы запретить доступ всем пользователям и предоставить доступ только пользователю example, нужно использовать следующую последовательность команд:

echo ALL >>/etc/cron.deny
echo example>>/etc/cron.allow

Как видите, сначала нужно запретить доступ всем пользователям, а затем внести имя пользователя (в данном примере это example) в файл allow.

Текстовые сокращения cron

В командах cron можно использовать сокращения для более быстрого планирования. Основные сокращения:

  • @hourly (заменяет 0 * * * *)
  • @daily (заменяет 0 0 * * *)
  • @weekly (заменяет 0 0 * * 0)
  • @monthly (заменяет 0 0 1 * *)
  • @yearly (заменяет 0 0 1 1 *)
  • @reboot (запускает команду при запуске сервера).

Примечание : не все версии cron способны обрабатывать такой синтаксис (это касается устаревших версий); при использовании сокращений обязательно проверьте выполнение команд.

Чтобы запустить задачу при запуске сервера, нужно отредактировать crontab, внеся в него подобную строку:

@reboot echo "System start up"

После выполнения данной команды ее вывод будет отправлен по указанному электронному адресу пользователя.

Tags: ,

    Gunny

    С помощью чего отправляется почта?

cron – программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени. Для редактирования заданий используется утилита crontab .

Листинг

Нельзя изменять файл расписания, просто открыв его в текстовом редакторе. Для его редактирования необходимо использовать команду crontab -e .

Простой пример файла расписания. Создание снимка экрана каждый час:

SHELL =/ bin/ bash MAILTO =username 0 * * * * scrot

Основные настройки

Выбор среды для исполняемых задач:

SHELL =/ bin/ bash

Имя пользователя, которому будет послано сообщение о выполнении задания:

MAILTO =username

Вместо имени, также можно использовать электронный адрес:

MAILTO =example@ example.org

Не обязательные настройки

Задаем каталог пользователя:

HOME =

Задаем каталоги исполняемых фалов:

PATH =/ sbin:/ bin:/ usr/ sbin:/ usr/ bin

Прописываем дисплей, если запускаемый по крону скрипт должен использовать графику:

DISPLAY =:0.0

Выбор времени выполнения задания

Время запуска представляется в таком виде:

Минута час день_месяца месяц день_недели команда

Символ "*" подразумевает - любое значение.

Минимальное время 1-а минута. Это связано с тем что cron каждую минуту просматривает список заданий, и ищет которые нужно выполнить.

Дополнительные переменные cron

Управление при помощи crontab

Добавление файла расписания:

Crontab имя_файла_расписания

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

Crontab -l

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

Crontab -r

Редактирование текущего файла расписания (при первом запуске будет выведен список поддерживаемых текстовых редакторов).

Многие пользователи сталкивались с тем, что некоторые программы необходимо запускать с определенной периодичностью или по расписанию, но делать это вручную удается далеко не всегда. Чаще всего такого рода потребность возникает на серверных машинах. И если на вашем сервере установлена операционная система семейства Unix (Debian, Centos, FreeBSD, Ubuntu), Cron или как еще его называют, демон-планировщик Cron - это то, что вам нужно.

Как понятно из второго названия, Cron - это специальная программа-планировщик, способная выполнять поставленные задачи по расписанию, причем неоднократно. К слову, выполнить запуск PHP-скрипта Cron также способен, не говоря уже о выполнении более тривиальных задач как в определенный отрезок времени, так и с заданной периодичностью.

Этот планировщик, получая указания от пользователя или пользователей, следует им при выполнении поставленных задач по заданным сценариям. Данные и инструкции для Cron содержатся в специальных таблицах, называемых crontab.

Установка, принцип работы и настройка Cron

Как правило, в большинстве стандартных дистрибутивов Unix-подобных систем демон-планировщик Cron содержится по умолчанию и устанавливается в составе пакета программ. Он уже присутствует на виртуальном хостинге и любом тарифе виртуальных серверах VPS

Если же у вас минимальный пакет установки, то дистрибутив планировщика устанавливается следующим образом:

  • Установка для Red Hat:
    1. Откройте консоль.
    2. Введите yum install vixie-cron.
  • Установка Cron для Debian-подобных систем:
    1. Откройте консоль.
    2. Введите apt-get install cron.

Команды Cron и принцип работы планировщика

После запуска ОС планировщик выстраивает очередь задач от всех пользователей. Затем он также дополнительно анализирует, есть ли crontab в /var/spool/cron и соответствуют ли файлы задач информации о пользователях, представленной в /etc/passwd. Важно помнить, что каждой учетной записи доступен один crontab, но при этом в нем можно размещать много задач.

После окончания проверки Cron считывает задания и время их исполнения из crontab и, если это необходимо, приступает к запуску сценариев.

Синтаксис crontab имеет такой вид:

[минута][час][день][месяц][неделя][пользователь][команда]

С настройками по умолчанию /etc/crontab выглядит так:

PATH=/sbin:/bin:/usr/sbin:/usr/bin

05 * * * * root run-parts /etc/cron.hourly

09 9 * * * root run-parts /etc/cron.daily

13 8 * * 0 root run-parts /etc/cron.weekly

58 6 3 * * root run-parts /etc/cron.monthly

Из описанного выше следует, что:

  • задача из /etc/cron.hourly исполняется в пятую минуту каждого часа;
  • задача из /etc/cron.daily будет исполняться ежедневно в девятую минуту девятого часа;
  • задача из /etc/cron.weekly будет исполняться каждое воскресенье на тринадцатой минуте восьмого часа;
  • задача из /etc/cron.monthly исполняется ежемесячно, в третий день на пятьдесят восьмой минуте шестого часа.

SHELL=/bin/bash означает, что команды из bin/bash будут использоваться для запуска Cron. Если же переменная не была указана, то необходимое значение будет позаимствовано из /etc/passwd для всех пользователей.

HOME=/ - указание корневого каталога.

MAILTO=root указывает, кому отправлять рапорт о выполнении задачи. Если результат выполнения вас не интересует, то в конце сценария следует записать Cron dev null, тогда будет приходить только уведомление об успешном завершении работы сценария или же неудачной попытке.

Выполнив задание, Cron бездействует, но при этом с определенной частотой проверяя crontab на появление новых заданий. При появлении новых заданий программа ставит их в очередь на выполнение.

Настройка Cron (Centos, FreeBSD, Ubuntu)

Добавить задание в Cron, как и выполнить настройку уже существующего сценария, можно через консоль следующим образом:

  1. Для начала решите, какие программы будут выполняться, а также узнайте путь к ним. Последнее можно сделать, перейдя в каталог с программой и используя команду cd.
  2. Далее, используя команду pwd, посмотрите полный путь к месту размещения нужной программы. При этом убедитесь, что у вас есть права на чтение и исполнение необходимого файла.
  3. Наберите команду crontab -e. После ее выполнения откроется редактор vi, где и будет выполняться настройка Cron относительно отдельно взятого сценария.

Выше уже упоминался формат Cron-команд, который указывается без скобочек и подчиняется следующим ограничениям:

  • в поле [минута] можно вводить значения от 0 до 59;
  • в поле [час] можно вводить значения от 0 до 23;
  • в поле [день] можно вводить значения от 1 до 31;
  • в поле [месяц] можно вводить значения от 1 до 12;
  • в поле [неделя] можно вводить значения от 0 до 7.

Важной особенностью команды Cron является то, что каждому параметру можно задать не одно, а несколько значений. В таких случаях каждое из них задается через запятую. Фактически это будет означать, что задача должна выполняться в каждый отрезок времени. Также можно указать интервал значений, используя значок «-», и это будет означать, что задание необходимо выполнять ежедневно, каждый час или месяц.

Формат Cron предполагает, что в строке содержится только одна команда. При этом после строки (даже если она была единственной) вы должны нажать клавишу Enter, иначе сценарий не будет принят к исполнению. И если вы допустите ошибку при заполнении нового задания, после его сохранения программа укажет вам на нее. Далее все просто - исправляете ошибку и заново сохраняете сценарий.

Напоследок, для лучшего понимания работы планировщика, представим вашему вниманию актуальные примеры crontab для FreeBSD и любых других Unix-подобных систем.

  • Выполнение команды из crontab каждые 5 минут */5 * * * * /home/user1/script.pl
  • Задача будет исполняться каждые 5 часов на 1-й минуте 1 */5 * * * /home/user1/script.pl
  • Выполнение поставленной задачи ежемесячно 1-го числа на 9-й минуте 8-го часа 9 8 1 * * /home/user1/script.pl

Еще одной примечательной особенностью программы является то, что после изменения в сценарии вам не нужно выполнять перезапуск Cron, потому что планировщик подхватывает изменившиеся данные автоматически. Если же сбой все-таки случился, и программа не распознала измененные данные, то Cron reboot можно выполнить через терминал при помощи команды sudo /etc/init.d/cron restart. После перезапуска все изменения наверняка будут отмечены планировщиком.

У вас остались вопросы относительно работы демоном-планировщиком Cron или все еще не слишком понятен синтаксис crontab для Ubuntu или любой другой Unix-системы? Вы можете обратиться за помощью к сотрудникам нашей техподдержки. Одним из многочисленных преимуществ использования хостинга от RigWEB является не только стабильность серверов, но и квалифицированные специалисты, которые всегда готовы ответить на ваши вопросы и оказать поддержку в решении любых вопросов в рамках своей компетенции.

Пользуйтесь профессиональным хостингом от RigWEB и достигайте максимальной продуктивности при работе над своими проектами!

Оригинал: Using cron scheduler on Linux systems
Автор: Rares Aioanei
Дата публикации: 29 сентября 2011 года
Перевод: А. Кривошей
Дата перевода: ноябрь 2011 г.

1. Введение

Если вы уже имеете некоторый опыт системного администрирования Linux, то должны знать, что такое cron и для чего он предназначен. Если же вы только начинаете работать с Linux, то эти знания вам пригодятся. Даже если вы уже изучали использование cron, данная статья поможет вам освежить знания.
Название cron происходит от Cronos, древнегреческого олицетворения времени. И это правильно выбранное имя, так как основным предназначением cron является помощь в планировании различных задач, которые система должна выполнить в заданное время. Если вы пользовались Windows, то вероятно вам приходилось копаться в утилите Scheduled Tasks. В целом назначение у программ аналогичное, но реализация разная. Cron предназначен для серьезных задач системного администрирования и обладает большей гибкостью. В качестве примера реальной задачи можно привести резервное копирование. Понравится ли вам вручную выполнять резервное копирование данных на нескольких сотнях машин? Думаю, нет. Вы просто пишете простой скрипт с использованием rsync, планируете его выполнение, например ежедневно, и забываете об этом. Все, что необходимо в дальнейшем - время от времени проверять логи. Некоторые даже используют cron для напоминания о важных личных событиях, например о днях рождения. Но cron - это просто демон, запускающий указанные вами задания. А имеется ли утилита, помогающая редактировать/добавлять/удалять эти задачи? Конечно имеется, и называется она crontab (от cron table). Однако будем двигаться вперед последовательно и начнем с инсталляции.

2. Инсталляция cron

Большинство дистрибутивов используют Vixie Cron и некоторые другие производные как дефолтную реализацию cron, и именно их мы будем рассматривать в этой статье. Кроме того, практически во всех дистрибутивах cron уже предустановлен, так как он является очень важной частью системы Linux. Хотя обычный пользователь, как правило, никогда не работает с ним напрямую, система и многие приложения используют cron (хорошим примером является периодическое обновление базы данных man-страниц). Значимым исключением является Gentoo, где необходимо вручную установить vixie-cron и добавить его в runlevel по умолчанию. В Arch, Debian, Slackware, Ubuntu, Fedora и OpenSUSE cron установлен по умолчанию и автоматически запускается при загрузке системы. Мы надеемся, что вы изучите man-страницы cron и crontab, так как во многих дистрибутивах используются их пропатченные версии, что делается для лучшей интеграции программы под конкретный дистрибутив. Поэтому существует вероятность, что функция, которая имеется например в Gentoo, будет недоступна в Slackware. В любом случае, нет ничего лучше чтения man-страниц, особенно если имеешь дело с новой программой, которую собираешься достаточно часто использовать.

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

Во-первых, мы должны убедиться, что cron запущен:

$ ps faux | grep cron

Если в выводе ничего не будет, проверьте, запущен ли cron, и добавьте его в службы, запускаемые по умолчанию, чтобы он стартовал при следующей загрузке. Как это сделать, зависит от дистрибутива. В системах Debian команда должна вывести примерно следующее:

Root 1424 0.0 0.0 22000 884 ? Ss 13:56 0:00 /usr/sbin/cron

Теперь заставим cron работать. Сначала необходимо подумать о том, какую команду мы будем использовать. Требует ли она привилегий root? Предположим, мы будем использовать crontab, чтобы добавить простой скрипт на выполнение через каждые пять минут как простой пользователь.

3.1. Crontab

3.1.1. Пример

Напишем простой скрипт, который будет выводить обычное диалоговое окно на базе curses в терминале (требуется dialog и любой эмулятор терминала - мы используем xterm):

#!/bin/sh xterm -e "dialog --msgbox "Testing cron..." 234 234" # This is a very simple example, treat it as it is

Назовем файл crontest.sh и сделаем его исполняемым, так как все, что запускается с помощью cron, должно быть исполняемым:

$ chmod +x crontest.sh

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

E ставится для редактирования, -r - для удаления. Будьте очень осторожны! Многие системные администраторы по неосторожности вводили -r вместо -e, тем более что эти клавиши расположены рядом, и удаляли все записи из crontab. В любом случае, скорее всего вы увидите полностью закоментированный файл (в crontab для обозначения комментариев используется #), в котором приведены примеры и описаны назначения полей записей. Да, запись состоит из полей, последнее из которых задает исполняемую команду, а остальные - временные характеристики. Итак, наша запись в crontab для скрипта, запускаемого каждые пять минут, выглядит следующим образом:

$ */5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh

Нам необходимо экспортировать переменную DISPLAY, чтобы xterm не выдавал ошибки вида "DISPLAY is not set". Теперь посмотрим назначение каждого поля.

3.1.2. Поля crontab

Если вы работали ранее с символами для подстановки, то вам не составит труда освоить использование звездочки в crontab: она означает, что вместо нее подставляются все возможные значения поля. Поля по умолчанию в Linux (будьте внимательны, некоторые Unix-системы используют другие реализации cron) обозначают, слева направо: минуту, час, день месяца, месяц, день недели, год (необязательно) и исполняемую команду. Таким образом, если мы хотим, чтобы наш скрипт запускался каждые пять минут, каждый час, каждый день, каждый месяц и каждый год, наша запись должна выглядеть так:

5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh

Мы призываем вас быть осторожнее с полем дня недели: в вашей стране первым днем недели может быть понедельник, а в других странах им может быть воскресенье. Если работаешь в мультикультурной, многонациональной среде, необходимо помнить о культурных и религиозных особенностях. Cron отправляет уведомления пользователю, которому принадлежит запись, на его почтовый адрес по умолчанию ($user@$hostname). Если вы хотите изменить адрес электронной почты, просто добавьте "MAILTO=$email_address" в crontab. Если вы хотите отключить эту функцию, добавьте ">/dev/null 2>&1" в конец записи.
Теперь, если вы уже устали от всплывающего каждые пять минут окна, снова запустите crontab -e, чтобы удалить или, что проще, закомментировать запись. Чтобы просмотреть содержимое crontab, просто используйте опцию -l (list).

3.2. Взгляд на /etc/

3.2.1. Скрипты cron

В предыдущих разделах мы решали простые и тривиальные задачи, просто для разминки, а теперь мы уже займемся серьезными делами. Заголовок данного раздела относится к директориям в /etc, которые отвечают за периодические задачи по обслуживанию системы. Например, в директории /etc/cron.weekly имеется скрипт man-db, который обновляет базу данных man-страниц. Все подобные скрипты включены в состав дистрибутива и запускаются согласно файлу /etc/crontab. Поэтому, если вы хотите разобраться их работе, лучше всего изучить содержимое этого файла. Вы увидите записи, похожие на те, что мы делали ранее, но исполняемые команды будут отличаться. "run-parts" - это небольшая утилита, созданная для запуска всех скриптов в заданном каталоге.
Внимательный читатель может заметить, что в /etc/crontab имеется одно поле, которого мы не видели при редактировании своего crontab - это поле "user". Это сделано по соображениям безопасности. Если вы вводите команду crontab -e как $user, это значит, что любая команда запускается от имени $user. Но так как /etc/crontab относится ко всей системе, необходимо явно задавать пользователя, так как может потребоваться запускать определенные скрипты или программы от имени другого пользователя, а не от root, особенно если системный администратор заботится о безопасности и добавляет пользователей и группы в систему по мере необходимости. Пример: для резервного копирования не нужны все привилегии root, требуются только права на чтение и запись в определенные директории, поэтому администратор создает группу backup и пользователя backupadmin с необходимыми правами и запускает ночные скрипты резервного копирования с помощью записи:

30 23 * * * backupadmin /home/backupadmin/nightlybkup.sh

Эта запись запускает скрипт nightlybkup.sh каждую ночь в 23:30. Если мы захотим запускать резервное копирование только с понедельника по пятницу, нужно отредактировать нашу запись:

30 23 * * 1-5 backupadmin /home/backupadmin/nightlybkup.sh

Если вы захотите запускать резервное копирование только по понедельникам, средам и пятницам, замените "1-5" на "1,3,5". Когда вы точно знаете, что вам нужно, cron становится понятным и простым в использовании.

4. Размышления о безопасности

Существует множество ситуаций, когда вы не хотите, чтобы пользователь, имеющий доступ к вашей системе, имел возможность создавать записи crontab. Здесь в игру вступают файлы /etc/cron.deny и /etc/cron.allow. Их использование аналогично /etc/hosts.allow и /etc/hosts/deny, поэтому, если вы работали с этими файлами раньше, то будете чувствовать себя как дома. Этих двух файлов (cron.deny и cron.allow) по умолчанию нет в системе, по крайней мере на системе, в которой мы работаем, поэтому по умолчанию всем разрешено создавать записи в crontab. Вы можете проверить, какие файлы, относящиеся к cron имеются в вашем каталоге /etc с помощью команды:

$ ls /etc | grep cron

И снова напоминаем, что все сказанное справедливо для Linux, так как отсутствие этих файлов на Solaris означает прямо противоположное, кроме того, файлы расположены в других местах. Сначала проверяется cron.allow, поэтому обычно мы вводим "ALL" в cron.deny, а затем добавляем пользователей, которым мы хотим предоставить доступ, в cron.allow.

5. Примеры использования cron

Каждую минуту:

* * * * * /usr/local/bin/check-disk-space.sh

Команда будет выполняться каждую минуту, день и месяц.

По дням:

30 02 10 01,06,12 * /home/$user/bin/checkdrive.sh

Эта команда будет запускать скрипт checkdrive.sh в 02:30 каждое 10 число января, июня и декабря.

Каждые полчаса:

00,30 * * * * /home/$user/backupdata.sh

Только по выходным:

* * * * 6,7 /usr/bin/weekend

Дважды в день:

20 11,16 * * * /usr/sbin/command

Команда будет выполняться каждый день в 11:20 и 16:20.

Каждый час в один конкретный день:

01 * 2 05 * /sbin/system_command

Команда будет запускаться каждый час каждое 2-е мая.

Каждые 10 минут во время пяти рабочих дней (понедельник - пятница):

*/10 * * * 1-5 /usr/local/bin/check-disk-space.sh

Только в рабочее время:

00 09-17 * * 1-5 /usr/local/bin/check-disk-space.sh

Эта команда будет выполняться один раз в день с 9 до 17 часов.

Один раз в году, в полночь 1-го января:

0 0 1 1 * /usr/local/bin/check-disk-space.sh

Дважды в год в 12:00 и в 24:00

0 0,12 1 */6 * /usr/local/bin/check-disk-space.sh

Эта команда будет исполняться дважды в год (каждые 6 месяцев) в 12:00 и в 24:00.

Каждый третий четверг любого заданного месяца в 10:00:

0 10 15-21 * 4 /usr/local/bin/check-disk-space.sh

Каждый день через 20 минут после каждого четного часа:

20 0-23/2 * * * /usr/local/bin/check-disk-space.sh

Эта команда будет выполняться каждый день через 20 минут после каждого четного часа (0:20, 2:20...22:20).

6. Заключение

Если в начале вам показалось, что записи crontab трудны для понимания и запутаны, уверяю, что при их постоянном использовании вы очень скоро будете наизусть помнить порядок и назначение всех полей, а также название и расположение всех файлов, которые необходимо редактировать. Все, что требуется - это практика.

Если вам понравилась статья, поделитесь ею с друзьями:

Сидя вечером за ноутбуком и ковыряя изучая на виртуалке очередной дистрибутив Linux, я задался вопросом: А нельзя ли упростить рутинный запуск процессов? Если вам интересно, прошу под кат. Статья несёт информационный характер и расчитана, больше, на новчиков в ОС семейства Linux, но и опытные линуксоиды, возможно, смогут подчерпнуть что-то новое для себя.
Демоны atd и cron
Немного погуглив и почитав литературу, я узнал о двух демонах: atd и cron . От первого я отказался в виду его ограниченности и неудобства работы с ним. А вот о втором хочется рассказать подробней.
Если ваш компьютер, вдруг, как кажется, без причины, начнёт производить поиск по диску, присылать вам почту и т.д., то, скорее всего, это работа демона cron

Михаэль Кофлер «Linux. Установка, настройка, администрирование.» - СПб.: Питер, 2014

Итак, что же именно делает этот самый cron . Демон активируется с интервалом в одну минуту, проверяет файлы crontab и запускает указанные в них программы. Изначально он применяется в ходе работ по поддержанию системы, но пользователь может использовать его для решения своих задач.

Если у вас установлен обычный дистрибутив, то вам не о чем беспокоится, cron инсталлируется автоматически. Если же минимальный, то не расстраиваемся - идём в терминал.
yum install vixie-cron //(RHEL - Red Hat Enterprise Linux)
или
apt-get install cron //(Deabian-подобные дистрибутивы)
Доступ юзерам к демону, настраивается в каталоге /var/spool/cron/tabs/user . Их права задаются в файлах /cron/allow и /deny . Добавляя пользователя в /allow мы разрешаем ему выполнять команду cron , а если добавить пользователя в /deny , то наоборот, пользователю будет запрещено пользоваться демоном.

Сам cron настраивается в каталоге /etc/crontab . Файл /crontab или файлы в /etc/cron. d содержат список команд, предназначенных для выполнения. Синтаксис таков:
in /etc/crontab [минута][час][день][месяц][неделя][пользователь][команда]
Например, если мне понадобится пинговать ya.ru через каждые 15 минут от имени суперюзера, то мне необходимо добавить следующее:
*/15 **** root ping ya.ru
Если в любом из первых пяти полей стоит символ *, то это поле игнорируется. В предыдущей команде не указаны ни месяц, ни неделя, следовательно, она будет выполнятся каждые 15 минут. Чтобы изменить конфигурацию воспользуйтесь в терминале командой vi или вручную измените содержание файла /etc/crontab .

Работа с.hourly, .daily, .weekly, .monthly
По умолчанию почти во всех дистрибутивах, файл /etc/crontab содержит всего несколько записей, необходимых для выполнения сценариев:
/etc/cron.hourly/* - сценарии выполняющиеся каждый час
/etc/cron.daily/* - сценарии выполняющиеся каждый день
/etc/cron.weekly/* - сценарии выполняющиеся каждую неделю
/etc/cron.monthly/* - сценарии выполняющиеся каждый месяц

Чтобы демон выполнял ваши команды, добавьте сценарий выполняющий команды в один из каталогов. Не забудьте установить бит execute(chmod a+x файл) . Если вы этого не сделаете, то у вашего сценария просто не будет доступа и он выполнятся не будет!
Для проверки, будет ли запускаться ваш сценарий, выполните команду
run-parts --test /etc/cron.daily
Если сценарий расположен в другом каталоге, то соответственно меняйте daily на monthly и т.д.
И помните, в имени сценария не может быть точек, любые символы, кроме точек. Команда run-parts просто-напросто игнорирует сценарии с точкой, не знаю почему.

Anacron
Помимо демона cron . в большинстве дистрибутивов установлен планировщик задач Anacron. Его задача - однократное (по требованию) выполнение сценариев /etc/cron.n где n может принимать три значения: daily , weekly , monthly . После их выполнения он завершает работу, а не висит в системе как cron . Так же Anacron не выполняет сценарии из каталога /etc/cron.hourly , это прерогатива cron . Глобальная конфигурация Anacron производится в каталоге /etc/anacrontab , но и дефолтных настроек обычно хватает.
P.S.
Для упрощения работы с повседневными задачами сисадмина работающего по ssh, целесообразней использовать cron и отключать Anacron, так как он выполняет задачи по одному разу, а cron игнорирует задачи, которые выполняет Anacron. В результате все задачи у вас будут выполнены только по одному разу. В большинстве дистрибутивов работа с демоном почти ничем не отличается, но если возникнут проблемы, воспользуйтесь wiki для вашего Linux.