Crontab параметры. Просмотр файла crontab. Только по выходным
В наших материалах посвященных Ubuntu Server время от времени затрагивается вопрос выполнения каких либо задач по расписанию. Чтобы не объяснять каждый раз одно и тоже мы решили создать данный материал, который должен помочь системным администраторам освоить и эффективно использовать планировщик задач в Linux.
В Ubuntu Server в качестве планировщика задач используется cron - планировщик с интерфейсом командной строки. Он является важной частью системы и начинает функционировать сразу после установки, исполняя различные системные задачи. Наша цель - поставить его себе на службу, тем более это не так сложно как кажется.
Предусмотрено два типа расписаний cron : пользовательское и системное. Отличаются они тем, что первое создается пользователями и исполняется с учетом пользовательских прав, второе используется в административных или системных целях и может быть запущено от имени любого пользователя.
Чтобы создать или изменить пользовательское расписание наберите команду:
Crontab -e
При первом запуске утилита предложит выбрать редактор, мы рекомендуем выбирать mcedit (требует установленного mc), либо другой редактор, с которым вы умеете работать.
Формат строк расписания имеет вид:
Минута час день месяц день_недели команда
- Минута - время в минутах от 0 до 59
- Час - от 0 до 23
- День - день месяца от 1 до 31
- Месяц - от 1 до 12 либо буквенные обозначения jan - dec
- День недели - от 0 до 6 (0 - воскресенье) или sat - sun
- Команда - строка в формате командного интерпретатора которая будет исполнена, допускается запись типа команда1 && команда2 для запуска нескольких команд подряд.
Значения минут, часов, дней можно указывать следующим образом:
- Значение - число обозначающее дату или время, допускается подстановочный знак * допускающий полный диапазон значений
- Несколько значений - допускается указывать несколько значений через запятую, например 2,14,22
- Диапазон значений - указывается через дефис, например 2-10
- Шаг значений - указывается через дробь, в знаменатель которой ставится шаг, например */3 - каждое третье значение 0, 3, 6, 9 и т.д. В качестве числителя должен быть диапазон значений либо звездочка.
Рассмотрим следующий пример записи:
0 8-19/2 * * 1 /home/ivanov/test
Она означает что каждый второй час с 8 до 19 (8, 10,12,14,16) по понедельникам запускать скрипт test в домашнем каталоге Иванова.
Сразу хотим предостеречь вас от распространенной ошибки, при указании периодического исполнения все даты должны быть указаны явно, звездочка обозначает полный диапазон значений, а не их отсутствие. Например если вам требуется исполнять некий скрипт каждый час с 10 до 15 неправильно будет:
* 10-15 * * * /home/ivanov/test
Данная строка приведет к запуску скрипта каждую минуту в диапазоне с 10 до 15 часов. Правильно будет:
0 10-15 * * * /home/ivanov/test
Данная запись позволит запускать скрипт в начале каждого часа указанного диапазона.
Кроме даты можно использовать ряд специальных строк:
- @reboot - выполнять команду при перезагрузке
- @yearly или @annually - выполнять 1 января, аналогично записи: "0 0 1 1 * "
- @monthly - выполнять 1 числа каждого месяца, аналогично "0 0 1 * * "
- @weekly - выполнять каждое воскресенье, равносильно "0 0 * * 0 "
- @daily или @midnight - ежедневно в полночь,"0 0 * * * "
- @hourly - раз в час, "0 * * * * "
Так для ежедневного исполнения нашего скрипта каждую полночь можно написать:
@midnight /home/ivanov/test
Завершив составление расписания сохраняем файл и выходим из редактора. Пользовательское расписание будет сохранено в /var/spool/cron/crontabs под именем текущего пользователя.
Для системных и административных задач предусмотрен файл /etc/crontab синтаксис записей в нем отличается наличием дополнительного значения - пользователя, от чьего имени будет запущено задание:
Минута час день месяц день_недели пользователь команда
Пример такой записи:
0 19 * * 1-5 root /etc/backup
Согласно которой в 19:00 с понедельника по пятницу будет запускаться скрипт /etc/backup от имени пользователя root .
Данный файл также содержит системные расписания, поэтому к его редактированию следует подходить с осторожностью. Все системные и административные задания следует размещать именно в нем.
Как видим cron достаточно прост в использовании, но в тоже время предоставляет богатые возможности по настройке расписаний в Ubuntu Server. Надеемся данная статья поможет администраторам освоить данный инструмент.
Cron применяют для автоматизации выполнения поставленных задач на сервере. Он работает на Linux и отлично подходит для того, чтобы запустить программу или скрипт на определенное время и с определенной периодичностью, запланировав это действие заранее.
Настройка планировщика заданий Cron
Необходимые к выполнению задания записываются в виде строк, в которых необходимо указать период включения и команду, указывающую, что именно необходимо запустить. Для каждого задания отводится отдельная строка. Например:
30 3 * * 2 /yourdirectory/myscript.pl
На более понятном простому пользователю языке тут обозначены: Минуты/Часы/ДеньМесяца/ДеньНедели/Команда. Данный пример означает, что в 3:30 ночи, каждый вторник, Сron должен запускать файл с названием youdirectory/myscript.pl.
Если перечислить значения через запятую, например в пункте «День» написать 2,4,6, то файл будет запускаться в указанное время каждый вторник, четверг и субботу.
Если задать значения через дефис, то задача будет исполняться в указанном интервале времени. Например, если в пункте «Часы» задать 3-7, то файл будет запускаться каждый час с 3 до 7 утра.
Также можно задать периодичность, написав в графе времени, например, в «Часы» /12. Тогда задача будет исполняться каждые 12 часов.
Важно знать, что «*» означает не отсутствие значения, а все возможные значения. То есть, если задать * * * * 1 /yourdirectory/myscript.pl, желая, чтобы файл запускался каждый понедельник, то это окажется совершенно неверным и файл будет запускаться каждую минуту.
Еще одна важная особенность – это необходимость указания абсолютного пути к файлу. А также файлу необходимо иметь такие права доступа, чтобы он хотя бы мог запускаться.
Из представленных примеров становится понятно, что данный планировщик задач в Linux является очень удобным инструментом, поэтому предлагаем вам более подробно ознакомиться с некоторыми его особенностями.
Наиболее простым и распространенным методом работы с Cron является панель администрирования хостинга. Однако, у различных панелей конфигурация Cron происходит по-разному.
Иногда случается, что хостинг не предоставляет возможности работы с Cron через панель администрирования. В такой ситуации используют SSH-протокол. С помощью него подключаются серверу, используя программу PuTTY, и вводят задачи в командной строке.
Для начала работы следует ввести команду:
Crontab –e
Далее вы попадете в vi – текстовый редактор, однако, эти редакторы могут быть разными у разных хостингов. Если вы не знакомы с работой в vi, то вы можете ввести команду: EDITOR=ee crontab –e, которая перенаправит вас в более простой и понятный редактор.
В случае, когда хостинг не осуществляет поддержку открывшегося редактора, придется разобраться с работой vi:
- для ввода текста необходимо перейти в одноименный режим, нажав кнопку «i»;
- для выхода из режима воспользуйтесь кнопкой «Esc»;
- для удаления символа в режиме ввода текста воспользуйтесь клавишами «Esc», а затем «x»;
- сохранения и выхода из файла нажмите «:wq»;
- в обязательном порядке нажимайте клавишу «Enter» в конце каждой строчки, это необходимо для работы Cron;
- для просмотра уже имеющихся задач в Cron введите команду crontrab-l.
Примеры задач для Cron в linux
— Исполнять задание каждые 6 часов в 30 минут каждого дня каждого месяца:
30 */6 * * * /yourdirectory/myscript.pl
— Исполнять задание после каждой перезагрузки:
@reboot /yourdirectory/myscript.pl
— Исполнять задание 15 числа каждого месяца в 00 часов 00 минут:
0 0 15 * * /yourdirectory/myscript.pl
PHP-файлы
Чтобы запустить PHP-скрипты, обычно используют интерпретатор. Универсальной инструкции по его работе нет, так как разные хостинги используют разнообразный софт. В следствие этого часто прибегают к помощи WGET для запуска PHP в Cron. Вводим следующую запись:
1 2 * * 3 root wget -O - -q -t 1 http://mysite.com/file.php
Разберем более подробно:
- «-O-» — не дает Cron создавать дополнительные файлы, тем самым, избавляя сервер от лишнего хлама, так как работа происходит в консоли;
- «q» — операции больше не выводятся на экран;
- «t-1» — разрешение лишь одной попытки соединения.
Ограничения Cron
У самого Cron имеется всего одно ограничение – период исполнения задач. Если вы перегружаете сервер своего хостинга, он может поставить запрет на запуск Cron чаще, чем раз в несколько минут или час. Кроме этого Cron ограничен только ресурсами сервера, такими как: оперативная память, объемы данных, время выполнения команд и т.д.
Если сервер перезагрузится, то Cron сохранит все ваши задачи, перезагрузившись вместе с ним.
Отчет
У Cron существует настройка, чтобы настроить уведомления о его работе на электронную почту. Это особенно полезно, если при работе случится какая-либо ошибка. Чтобы включить такие уведомления на почту, необходимо в crontab вписать строчку:
MAILTO= [email protected]
После MAILTO= указывается необходимая почта. Указать их можно сразу несколько, перечислив через запятую. Теперь, если вдруг случится ошибка, вы будете проинформированы об этом. При чем, к вам на почту будут приходить и результаты работы скриптов. Однако, если данная функция вам мешает, ее можно и отключить, введя в конце задачи команду > /dev/null 2>&1.
Очень часто в Linux-подобных системах может потребоваться автоматизировать некоторые рутинные процессы. Для этого применяются специальные планировщики. Одним из наиболее известных из них является Cron, о настройках которого и пойдёт речь в этой статье.
Что представляет собой Cron?
Название программы образовано от греческого «хронос», означающего время. Что, собственно, логично. Задача демона — в определённые моменты выполнять записанные в него команды. Сам процесс реализации основан на проверке таблиц крона и сравнении их с и временем.
Файл crontab
Самым главным элементом настройки Cron является конфигурационный файл crontab. Он содержит в себе команды исполнения и пути к скриптам. Все они запускаются от имени суперпользователя. Так как они расположены в директории /etc/cron.d, настройка этих файлов должна производиться именно там.
Для каждого отдельного пользователя системы используется свой файл crontab.
Разные дистрибутивы Linux используют свои каталоги для хранения пользовательских настроек. Для RedHat это — var/ spool/cron. В Debian и Ubuntu это будет var/spool/cron/crontabs. И var/spool/cron/tabs в SUSE.
Список команд для управления crontab
Cron имеет набор специальных директив, с помощью которых можно управлять планировщиком. Применять их нужно в связке с crontab. Вот небольшой список:
- -u имя_пользователя. Устанавливает пользователя, с задачами и настройками которого будут производиться дальнейшие действия. Если опустить данный ключ, то будет задан пользователь по умолчанию.
- -l. Выведет текущий список задач.
- -e. Производит запуск редактора для планировщика задач.
- -r. Удаляет все имеющиеся задачи из списка.
Формат задачи
Как было сказано выше, настройка Cron заключается в задании команд в специальном файле. Выглядит это как простая запись, состоящая из шести колонок:
- в первой указывается количество минут. Доступный интервал — от 0 до 59. Можно использовать несколько значений, диапазон и специальные символы;
- вторая колонка — часы. Могут использоваться значения от 0 до 23;
- далее — день. Здесь можно указать число от 1 до 31;
- четвёртый — месяц. Минимальное значение 1, максимальное — 12;
- пятая — неделя. 0 или 7 соответствует воскресенью;
- последней идёт сама выполняемая команда.
Как было упомянуто, в файле можно указать специальные символы, «*» или «/». Например, такая запись — 23 */2 *** echo «Выполнить» означает, что каждый чётный час и 23 минуты будет отображаться надпись «Выполнить».
Особенности файла crontab
При настройке Cron необходимо помнить, что он обладает специфичными свойствами, которые стоит учитывать при конфигурировании:
- каждый файл обязательно должен завершаться пустой строкой, иначе последний пункт может быть проигнорирован, а иногда и целиком весь файл;
- файлы, размещённые в каталогах, имеющих в имени точку, также будут проигнорированы планировщиком;
- в файлах настройки можно использовать символы решётки «#». Они применяются для того, чтобы отметить строки с комментариями. Это очень удобно для описания запланированных задач и команд.
Дополнительные переменные
При настройке Cron можно применять в командах специальные значения и сокращения. Например, для указания дня недели можно использовать следующий список:
- sun — воскресенье;
- mon — понедельник;
- tue — вторник;
- wed — среда;
- thu — четверг;
- fri — пятница;
- sat — суббота.
Для месяцев также имеются отдельные буквенные значения — jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec.
Также для настройки Cron имеются отдельные переменные, способные заменить целые строки команд:
- @reboot. Команда будет стартовать каждый раз при запуске компьютера;
- @yearly. Данная задача будет запускаться один раз в год. Эквивалентная ей запись в числовом виде может быть такой: 0 0 1 1 *. Ее синоним ещё можно записать как @annually;
- @monthly. Как можно догадаться из названия, данная переменная производит запуск команды раз в месяц. Ее числовой аналог — 0 0 1 * *;
- @weekly. Данная переменная будет запускаться каждую неделю;
- @dayly. Раз в день;
- @midnight. Запуск будет произведён в полночь;
- @hourly. Каждый час.
Настройка Cron в Centos 7
Сам процесс установки и конфигурирования мало чем отличается от других схожих Linux дистрибутивов. Перед настройкой Cron в Centos необходимо установить пакет cronie в систему. Сделать это можно с помощью команды yum install cronie. Для создания файла с инструкциями нужно выполнить в терминале crontab -e. Все системные настройки Cron будут сохраняться по адресу /var/spool/cron/имя пользователя.
Несколько полезных примеров для создания часто повторяющихся задач
Можно провести настройку Cron таким образом, чтобы охватить практически все потребности любого пользователя.
- 00 09-17 * * 1 - 5 /путь/ к команде/ крона. Данная команда будет автоматически выполнять запланированное действие каждый рабочий день с 9 до 5 часов каждую первую минуту;
- 00 9,17 * * * /путь/ к команде/ крона. В этом примере происходит исполнение команды два раза в день. Первый в 9, второй - в 5 часов. Знак «*» показывает, что команда будет выполняться каждый день, месяц и год;
- Также не стоит забывать и про символьные переменные. Например, @monthly будет выполнять задачу каждый месяц в первую минуту первого часа первого дня. А @daily будет запускаться каждый день.
, | |
На сегодня 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, нужно использовать следующую последовательность команд.