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
Редактирование текущего файла расписания (при первом запуске будет выведен список поддерживаемых текстовых редакторов).
Предположим нам нужно запускать определенную задачу каждый день, или, может, каждую субботу в 12 ночи? В Unix-подобных системах существует возможность автоматизировать запуск повторяющихся задач при помощи демона планировщика задач cron. В данной статье будут рассмотрены основы работы с ним.
Все описанное в данной статье тестируется в ОС Linux Debian 6.0 squeeze, однако в большинстве случаев будет работать на других Unix-подобных операционных системах.
Основные команды
Для управления планировщиком задач используется команда crontab со следующими ключами:
U пользователь - определяет пользователя чьи задачи будут просматриваться/редактироваться, отсутствие данного параметра устанавливает текущего пользователя;
-l - показывает список текущих задач;
-e - запускает редактор планировщика задач;
-r - удаляет все текущие задачи.
Таким образом для назначения определенной задачи нужно выполнить команду crontab -e и построчно написать список необходимых задач на основе синтаксиса cron.
Синтаксис cron
В общем виде задача крон представляет собой строку вида:
* * * * * команда
Каждой звездочке в строке соответствует определенное значение:
0 и 7 в дне недели обозначает воскресенье, поскольку в некоторых странах день недели начинается с воскресенья. Соответственно 1 - понедельник, 6 - суббота. В файле crontab помимо перечисленных выше допустимы следующие основные символы:
# - комментарий (строки начинающиеся с данного символа не выполняются);
, - перечисление значений (1,2,3,4);
/ - каждые n раз (*/n - каждые n, */5 - каждые 5, */2 - каждые 2);
- - интервал значений (1-5 - с 1 до 5, 4-6 - с 4 до 6).
Из вышеперечисленного следует, что следующие записи соответствуют следующим строкам:
0 5 * * * - каждый день в 5:00;
*/10 * * * * - каждые 10 минут;
0 0 1 1 * - 1 января каждого года;
0 9 * * 1,3,5 - понедельник, среду и пятницу в 9 утра;
0 0 1 * * - каждое 1-е число месяца.
Так же в файле crontab можно записывать следующие предопределенные значения:
@reboot - при загрузке операционной системы;
@yearly - каждый год в полночь 1-го января;
@monthly - каждый месяц в полночь 1-го числа;
@weekly - в полночь каждый понедельник;
@daily - ежедневно в 0:00;
@hourly - в начале каждого часа.
Пример файла crontab
Лучше всего понять синтаксис файла crontab можно на следующем примере: crontab -e -u user
#Привет, я файл crontab пользователя user, и вот чему научил меня мой хозяин
#Я здороваюсь с ним после своей загрузки
@reboot echo "Привет, Хозяин!"
#Каждый рабочий день в 6:45 я запускаю для него скрипт,
#который включает будильник
45 6 * * 1-5 /home/user/beep.sh
#Пока хозяин добирается до работы или высыпается в выходной день,
#я присылаю для него свежие новости (каждый день в 8 утра)
0 8 * * * /home/user/newsmail.sh
#Я зову хозяина домой в конце рабочего дня
0 18 * * 1-5 echo "Приезжай домой, Хозяин" | mail -s "Конец рабочего дня" user
#И я поздравляю его
@yearly echo "С Новым годом"
10 Окт 2012 11:41 -- Юрий Акимов
Я многое слышал о том, что в linux есть удобный планировщик задач cron. Однако, у меня не было необходимости им пользоваться, и разбираться в его настройки не хотелось… консоль, много английских букавок… было страшно. Но, благо, мои опасения были напрасны — всё до элементарного просто. В статье будет рассмотрено, как настроить выполнение своих скриптов по расписанию, и в качестве примера установим «кукушку».
Для начало немного о том, как это вообще работает.
При запуски системы стартует демон cron. Им можно управлять (останавливать/запускать/узнавать статус) командой: sudo service cron (stop/start/status). Но это редко, когда бывает нужно.
Сам демон cron большую часть времени спит, и слегка приоткрывает глаз раз в минуту, что бы проверить наличие заданий на это время. Если задания отсутствуют, то он опять уходит в спячку.
Задания находятся в файлах имена которые равны именам пользователя, а сами файлы лежат в папке /var/spool/cron/crontabs. Папка защищена от постороннего вмешательства и доступна только суперпользователю. Но, каждый пользователь может настроить расписание для своих задач, не зная пароля от рута (суперпользователя).
Что бы настроить cron для обычного пользователя достаточно набрать:
Если нужно создать задачу для другого пользователя, то запуск производится командой:
sudo crontab -u user -e
Заместо юзера пишем нужного пользователя, например root.
При первом запуске будет вопрос о редакторе… мне нравится nano. Он простой и запускается без графического интерфейса.
Синтаксис для задач очень прост. Рассмотрим пример со скриншота по запуску кукушки:
0 */1 * * * /home/zegi/bin/kuku
Всего в задаче 2 основных поля: 0 */1 * * * — обозначает время, когда будет срабатывать команда. А /home/zegi/bin/kuku — путь к скрипту в котором описана команда(ы).
С адресом к скрипту не должно быть проблем (zegi — это имя пользователя… не забудьте поставить своё). Но нужно пояснить, как задать крону время для выполнения скрипта.
Всего у нас 5 ячеек для ввода, которые разделяются пробелом.
1 — минуты (числа от 0 до 59)
2 — часы (от 0 до 23)
3 — день месяца (от 1 до 31)
4 — месяц в году (от 1 до 12… например февраль это 2)
5 — день в недели (от 1 до 7. Используется западная неделя, когда началом является воскресенье. т.е. ВС-1, ПН-2, ВТ-3, СР-4, ЧТ-5, ПТ-6, СБ-7).
Каждая ячейка обязательна должна быть заполнена. Если нужно, что бы команда выполнялась каждый месяц, то ставим * в 4-ом поле. Тоже самое относится и к остальным полям.
Вернёмся к примеру с кукушкой, когда скрипт срабатывает каждый час. Что бы задать периодичность используется / . Например если нужно, что бы задача выполнялась каждых 5 минут, по понедельникам то ставим:
Если нужно, что бы задача выполнялась каждый час, то придётся устанавливать и определённую минуту. Если оставить звёздочку(* */1 * * *), то крон будет выполнять каждую минуту — ибо условия соблюдены: он проверил все 5 ячеек и их значение соотвтествует текущему времени (минуты — всё равно. Часы — каждый час, а не только определённые).
Перед слешем всегда должна идти звёздочка. Например, назначить выполнение каждую минуту, начиная с 30-ой, вписав 30/1 — не получится.
Если нужно, что бы задача выполнялась не циклично, но несколько раз, то значения пишутся через запятую.
Например нужно выполнить задачу по будням в 12 часов дня и 6 вечера. То это будет выглядеть так:
* 12,18 * * 2,3,4,5,6
По окончанию редактирования задач, не забудьте сохранить изменения (Ctrl+O > энтер), а затем можно выйти (Ctrl+x).
Cron должен оповестить, что появилась новая задача и он готов её выполнять, написав: «crontab: installing new crontab».
Посмотреть созданные задачи (может быть вы ничего и не делали для себя, а администратор сети, что нибудь вам настроил) можно командой:
И в конце сам скрипт кукушки , который кукукает каждый час:
#!/bin/bash
h=`date +%l`
while [ $h -gt 0 ]
do
play ~/kukushka.wav
h=$[$h-1]
done
Скачать звук с кукушкой можно командой:
wget http://dl.dropbox.com/u/24844052/tuksik/kukushka.wav
Play входит в пакет sox. В ubuntu его можно установить командой.
|На сегодня 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 - демон-планировщик задач в UNIX-подобных операционных системах, использующийся для периодического выполнения заданий в определённое время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные директории.
Файл конфигурации: /etc/crontab
Примеры:
Ну и на всякий случай для copy-paste crontab -e
:
*/3 * * * * echo - запускать команду каждые три минуты
0 */5 * * * - запускать каждые пять часов
0 12,13,17 * * * - запускать команду в 12,13 и 17 часов
0 */2 * * * /home/user/script.sh - пример запуска скрипта
Copy-paste для /etc/crontab
*/3 * * * * - запускать команду каждые три минуты
0 */5 * * * - запускать каждые пять часов
0 12,13,17 * * * - запускать команду в 12,13 и 17 часов
0 */2 * * * root /root/script.sh - пример запуска скрипта
Настройка cron
Если у вас нет прав суперпользователя в системе, то тогда вам придется воспользоваться командой:
$ crontab -e
Она откроет вам текстовой редактор и чистый лист, куда и добавляются задания от своего пользователя.
Или если вы под пользователем root
, то можно просто отредактировать файл /etc/crontab
Запуск задания каждые 30 секунд
Так-как минимальное указание периода выполнения задания в cron равно 1 минуте или 60 секундам , приходиться использовать хак. Итак, для того чтобы задание выполнялось каждые 30 секунд нужно сделать 2 задания.
# запуск задания каждые 30 секунд * * * * * /path/to/task * * * * * (sleep 30 ; /path/to/task)
Важно знать
Что есть два пути добавления заданий в cron
a) Редактировать файл /etc/crontab
b) Использование команд: $ crontab -e
Соотв. для отображения заданий
a) cat /etc/crontab
b) $ crontab -l
При указании исполняемого файла или скрипта желательно указывать полный путь до него.
Всегда можно получить подсказку используя команду crontab с ключом -?
или -help