Среда, 27.11.2024
TiM
Меню сайта
Категории раздела
Мои статьи [9]
1С Бухгалтерия [1]
Arduino / ATMEGA [10]
ESP8266 [1]
OrangePi PC и Raspberry Pi 2 Model B V1.1 [4]
Шаговые двигатели [1]
PHPProBid [0]
CMS DLE (DataLife Engine) [0]
CMS Joomla [13]
SugarCRM [5]
Базы данных [5]
PHP скрипты [16]
Bash и скрипты [27]
IP АТС Elastix / Asterisk [12]
CentOS [6]
Debian [8]
Lubuntu / LinuxMINT [29]
Windows [28]
Умный дом [1]
Сервера [16]
Natural Selection [1]
System Shock 2 [1]
Форма входа
Главная » Статьи » Сервера

Планировщик CRON и команды crontab

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

Задания cron

Для редактирования заданий crontab текущего пользователя используется команда

crontab -e

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

crontab -l

Редактирование заданий crontab заданного пользователя, например www-data:

crontab -u www-data -e

Просмотреть список заданий crontab пользователя www-data:

crontab -u www-data -l

Пользовательские файлы с заданиями crontab находятся с каталоге:

ls /var/spool/cron/crontabs

Системный конфиг crontab:

mcedit /etc/crontab

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

Формат и значения полей

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

Общий формат записи задания cron в пользовательских файлах:

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

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

Формат записи в системном конфиге crontab немного отличается, необходимо прописывать пользователя от которого необходимо выполнить команду.

* * * * * <пользователь> <выполняемая команда>

Пример системного файла crontab

Системный файл crontab /etc/crontab

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 )

Пример пользовательского файла crontab

# в качестве командного интерпретатора использовать /bin/sh
SHELL=/bin/sh
# результаты работы отправлять по этому адресу
MAILTO=paul@example.org
# добавить в PATH домашний каталог пользователя
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/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"

Особенности

  • Все условия (времени запуска) проверяются по «логическому И», кроме условий «день недели» и «день месяца» — указанные совместно, они обрабатываются по «логическому ИЛИ», то есть «по любому из дней». Однако, такая логика неочевидна и не позволяет создать условие типа «первый понедельник каждого месяца» или «каждую пятницу в 13 число». Разработчики не изменяют данное поведение, считая его стандартом.
  • Все файлы 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>, то выводимые данные будут отправляться на указанный адрес.
Категория: Сервера | Добавил: Timofey (13.01.2016)
Просмотров: 2707
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
YANDEX
Яндекс.Метрика
Сайты
  • Харьковский Юридический Альянс
  • Оцифровка кинопленки
  • TiM ©
    Харьков 2024