- Что такое планировщик Cron и зачем он нужен
- Как пользоваться планировщиком Cron
- Как запускать задачи через Cron чаще 1 раза в минуту
Что такое планировщик Cron и зачем он нужен
Сегодня мы с вами поговорим об одной очень интересной и полезной штуке, именуемой Cron.
Cron — это специальная утилита, позволяющая выполнять различные задачи (например, запускать какие-либо программы или скрипты) по заранее составленному расписанию (то есть в заданное время или через заданные промежутки времени).
Механизм работы утилиты Cron достаточно прост. Все запланированные задачи описываются в специальном файле — crontab (/etc/crontab). В нём же для каждой задачи описано в какое время (или через какой интервал времени) эту задачу нужно запускать. Сама утилита работает в качестве демона (в фоновом режиме), постоянно мониторя, не пришло ли время выполнять какую-либо описанную в crontab задачу. Если время для выполнения какой-либо задачи пришло — Cron её запускает.
Как пользоваться планировщиком Cron
Для начала работы с Cron нужно выполнить в командной строке команду «crontab -e». Эта команда открывает файл /etc/crontab в вашем редакторе по умолчанию (опция -e). Если вы ранее не настраивали запуск каких-либо задач через Cron, то этот файл будет пустым.
В этот файл нужно вписать расписание запуска задач. На каждой строке прописывается условие запуска одной задачи. Формат записи следующий:
* * * * * command to execute # ┬ ┬ ┬ ┬ ┬ # │ │ │ │ │ # │ │ │ │ │ # │ │ │ │ └─ день недели (0-7), 0-6 - дни от Sunday до Saturday (можно писать цифры или названия), 7 - это Sunday, так же как и 0 # │ │ │ └─── месяц (1-12) # │ │ └───── день месяца (1 - 31) # │ └─────── час (0 - 23) # └───────── минута (0 - 59) |
Знак «#» означает комментарий, знак «*» — любое значение, знак «/» перед значением означает, что указанное значение является интервалом.
Примеры различных условий:
min hour date month day of the week когда будет сработывать условие */1 * * * * каждую минуту 15 */4 * * * каждые 4 часа в 15 минут (7:15, 11:15, 15:15 и т.д.) 3 5 8,21 6,9 * в 5:03 8 июня, 21 июня, 8 сентября, 21 сентября 0 0 3,8 * * в полночь 3 и 8 числа каждого месяца |
Теперь давайте составим какой-нибудь реальный пример, скажем для запуска bash-скрипта /www/test.sh в 12:00 каждого первого мая:
# this is a comment 0 12 1 5 * /www/test.sh # this is a comment too |
В Omega2 по-умолчанию используется редактор vi. В этом редакторе для того, чтобы сохранить изменения и выйти, — нужно нажать клавишу ESC (переключение в командный режим), потом ввести :wq и нажать Enter.
Для нормальной работы Cron, файл crontab должен обязательно заканчиваться комментарием. По крайней мере, так написано на сайте Onion. Причина такой оговорки в том, что каждая рабочая строка файла crontab (содержащая не коммент, а условие и задачу для запуска) должна заканчиваться символами конца строки и перевода каретки, которые добавляются автоматически при переходе на новую строку. То есть добавление комментария в последнюю строку просто гарантирует нам, что предпоследняя строка (которая может оказаться рабочей) оформлена надлежащим образом и следовательно будет обработана.
Если вы запускаете скрипты, для которых в системе не прописан обработчик по-умолчанию, то команда помимо пути к скрипту должна также содержать путь к обработчику (то есть выглядеть также, как если бы вы запускали этот скрипт из командной строки):
# запускаем файл test.php в отдельном потоке 0 12 1 5 * /usr/bin/php-cgi /www/test.php& # |
Кроме того, можно направить весь вывод, генерируемый в результате обработки очередной строки crontab, в отдельный файл (лог). Например:
# запускаем файл test.sh и перенаправляем весь вывод (stdout и stderr) в лог-файл 0 12 1 5 * /www/test.sh >> /tmp/log.txt 2>&1 # |
После того, как вы добавили в расписание новую запись, Cron необходимо перезапустить. Для этого нужно выполнить из командной строки следующую команду:
/etc/init.d/cron restart |
Кстати, чтобы просто запустить Cron и добавить его в автозагрузку (чтобы он стартовал автоматически при включении омеги), нужно выполнить из командной строки следующие команды:
/etc/init.d/cron start /etc/init.d/cron enable |
Как запускать задачи через Cron чаще 1 раза в минуту
Итак, как видите, Cron — довольно мощная штука, однако есть у него и недостатки. Одним из таких недостатков является отсутствие возможности запланировать выполнение задач чаще 1 раза в минуту. Что с этим можно сделать?
Один из вариантов — написать своего демона, который будет выполнять нужную задачу с той частотой, которая вас устраивает, а также «проверочный» скрипт, который будет проверять, запущен ли демон и запускать его, если он не запущен. При этом Cron можно использовать для периодического запуска этого «проверочного» скрипта. Это позволит, во-первых, автоматически запускать нашего демона при старте системы и, во-вторых, перезапускать его, если он по каким-либо причинам вылетит.
Пусть нам, к примеру, нужно раз в секунду запускать скрипт test.php, лежащий в папке /www.
1) Пишем скрипт demon.php (и кладём его для примера в туже папку — /www) следующего содержания:
<!--?php // скрипт для бесконечных дерганий test.php с интервалом 1 секунда error_reporting(0); // выключаем вывод сообщений об ошибках set_time_limit(0); // время выполнения скрипта не ограничено do{ // бесконечный цикл sleep(1); // ждём 1 секунду exec('/usr/bin/php-cgi /www/test.php'); }while(true); ?--> |
2) Пишем скрипт turner.sh (и тоже кладём его для примера в папку /www):
#!/bin/ash # Скрипт для периодической проверки, запущен ли демон, и его запуска, в случае, когда он не запущен # Этот скрипт нужно запускать через cron по расписанию # после копирования нужно открыть его в редакторе и убрать виндовые концы строк # (если они есть) + поменять права - 'chmod +x turner.sh' A=$(ps) if echo $A|grep -q 'demon.php'; then echo "it works! do nothing" else echo "it not works! starting our demon" /usr/bin/php-cgi /www/demon.php& # & - запустить демона в отдельном потоке и отвязаться (чтобы этот скрипт завершился) fi |
3) Осталось только прописать запуск срипта turner.sh в Cron:
# run turner.sh /1 * * * * /www/turner.sh # |
На этом всё.
Кстати, в нашем магазине можно купить микрокомпьютер Omega2 по очень привлекательной цене.
- Часть 1. Первое знакомство
- Часть 2. Использование GPIO
- Часть 3. Док-плата
- Часть 4. Работа с файлами
- Часть 5. Работа с USB flash-дисками
- Часть 6. Установка, настройка и использование php для интерактивного взаимодействия
- Часть 7. Выполнение задач по расписанию с помощью планировщика Cron
- Часть 8. Подключаем проводной Ethernet.
- Часть 9. Сборка альтернативной прошивки на базе OpenWRT.