Настройка планировщика задач cron OpenServer

Дата публикации: 28.06.2016

nastrojka-planirovshchika-zadach-cron-openserverПриветствую вас, друзья 🙂

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

На уровне операционных систем (Windows, Linux, MacOS) уже существуют программы для решения поставленной задачи. Они называются «Планировщики задач«. Данный софт является стандартным и доступным по умолчанию (сразу после установки ОС).

Но сегодня наш разговор будет посвящён не им, а планировщику заданий cron, встроенный в OpenServer, который является, пожалуй, самой популярной WAMP-платформой (сборка Apache+MySql+PHP для Windows) на сегодняшний день.

Более подробно об OpenServer вы можете прочитать в статье, посвящённой программам для создания сайтов.

Если вам лень читать статью и вы любитель видео, предлагаю вашему вниманию ролик, в котором рассказывается об основных возможностях данного софта, а также где можно скачать OpenServer, как его установить и запустить сайт на базе OpenServer за считанные минуты:

Общая информация о планировщике заданий cron OpenServer

Если вы являетесь пользователем UNIX-подобных систем, то программа «cron» должна быть вам знакома, т.к. это стандартный планировщик задач для данного класса операционных систем.

Первое, что бросается в глаза после общения со стандартным планировщиком задач Windows, – это то, что cron лишён графического интерфейса, и расписания задач нужно вносить в специальный файл crontab в соответствии с внутренним синтаксисом cron.

Скорее всего, это обстоятельство и стало причиной для интеграции данного планировщика задач в OpenServer, т.к. данный шаг лишал разработчиков необходимости выдумывать графический интерфейс.

В плане функционала лично я никаких отличий от стандартного cron Unix не заметил. Повторюсь, что cron OpenServer служит для создания расписаний выполнения различных задач (скриптов, программ и т.д.), как и стандартные планировщики на уровне ОС. Поэтому без него вполне можно обойтись 🙂

Единственный его плюс – это возможность использовать планировщик cron на ОС Windows, что может порадовать фанатов Unix-систем, которые вынуждены работать на детище Билла Гейтса и компании Microsoft.

Также cron OpenServer может подойти тем, кому не очень нравится стандартный планировщик задач Windows. Основной причиной может служить бедность настроек времени выполнения, т.к. возможности Task Scheduler (стандартный планировщик Windows) ограничены фиксированным списком, в котором нельзя вводить произвольные значения (несколько раз в час, день, периодичность и т.д.).

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

Насколько я знаю, в стандартных планировщиках такой возможности нет. Если в UNIX cron задачу ещё можно приостановить, закомментировав её расписание в файле crontab, то в Windows вам придётся попросту удалять задачу и создавать её каждый раз, когда необходимо выполнять снова – всё это крайне неудобно.

Поэтому если вы, как и я, являетесь разработчиком, работающим с ОС Windows, то планировщик задач cron OpenServer будет для вас удобнее стандартного Task Scheduler.

Давайте теперь рассмотрим, как же его настроить и пользоваться.

Настройка cron OpenServer

Для начала нам необходимо запустить сам OpenServer, для чего запускаем OpenServer.exe из директории, в которую у вас был установлен данный софт. Если вы вдруг забыли, куда его устанавливали, напомню, что по умолчанию OpenServer устанавливается в директорию «C:\OpenServer».

После старта программы в панели инструментов Windows, рядом с часами, появится красный флажок OpenServer, сигнализирующий о том, что программа запущена, но сервер ещё не работает.

Перед запуском веб-сервера нажимаем на флажке любой кнопкой мыши и выбираем пункт «Настройки» для конфигурации планировщика задач cron OpenServer:

http://cccp-blog.com/wp-includes/images/banners/templatemonster/banner_content.jpg

nastrojki-openserverВ открывшемся окне находим вкладку с названием «Планировщик заданий», которая выглядит так:

planirovschik-zadanij-cron-openserverКак видите, интерфейс весьма незамысловатый. Для добавления новой задачи вам необходимо ввести периодичность запуска задачи, указать путь к скрипту или исполнительному файлу программы и нажать на кнопку «Добавить». После данных действий задача появится в блоке со списком всех запланированных заданий.

Теперь поговорим о синтаксисе заданий более подробно. Он такой же, как и для cron UNIX, т.е. для указания времени можно использовать цифры и символ «*», который означает «для всех».

Синтаксис cron OpenServer сильно упрощён, т.к. в оригинальном UNIX-планировщике, к примеру, для дней недели и месяцев доступны сокращённые варианты названий на английском. В нашем же случае такая запись приведёт к ошибке. Дни недели, к примеру, нужно будет указывать только цифрами, где 1 – это понедельник, а 7 – воскресенье.

Если поговорить о реальных примерах, то:

  • запись типа «1 * * * *» будет означать запуск задачи каждую первую минуту часа, т.е. она будет выполняться каждый час;
  • запись «*/2 * * * *» будет запускать задачу через каждые две минуты;
  • запись «2-4 * * * *» будет соответствовать запуску задачи 3 раза в течении каждого часа во 2,3 и 4 минуту;
  • запись «* * 1 * *» будет соответствовать ежемесячному запуску задачи первого числа месяца.

Думаю, что логика понятна. Если вы хотите больше примеров, то можете обратиться за помощью к Википедии, где есть очень неплохая и понятная (что редкость для вики 🙂 ) статья на русском языке по данному поводу.

Также хотелось бы посоветовать вам хороший сайт для тренировки написания времени запуска заданий cron, где отображаются все параметры для каждого временного блока, а после ввода данных выдаётся периодичность выполнения (правда, на английском).

При пользовании ресурсом не забывайте, что в качестве параметров времени запуска cron OpenServer принимает только числовые значения.

С временными параметрами выполнения задач cron OpenServer мы разобрались, теперь поговорим о том, как правильно задавать путь к запускаемому объекту.

Запуск php-скриптов с помощью планировщика задач cron в OpenServer

Объектом может быть как исполнительный (.exe) файл программы и php-скрипт, так и обычные файлы, которые будут открываться в тех программах, для которых они предназначены. ОС определяет последнее по ассоциациям расширений файлов и указанных для них программ, которые хранятся в системном реестре.

Поскольку планировщик задач cron встраивался в OpenServer для разработчиков (равно как сама WAMP-сборка создавалась для них же), то он, в первую очередь, предназначен для запуска программных скриптов.

Вообще идея написания сегодняшней статьи возникла у меня после моего недавнего знакомства с CMS/CMF Magento, в рамках которого мне необходимо было реализовать автоматическую отправку писем на email покупателей порциями через равные промежутки времени.

В самом Magento есть встроенный планировщик cron, задачу для которого я создал в коде сайта. Соответственно, моей задачей было запускать скрипт, отвечающий за автоматический запуск задачи в Magento, на веб-сервере через равные промежутки. Вот такая вот петрушка 🙂

Путь к скрипту у меня был известен, но, указав его просто в cron-задаче в OpenServer, он просто открывался как обычный файл с интервалами, которые я указал.

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

%progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\userdata\temp\config\php.ini -q -f %sitedir%\sitename.com\cron.php

Первая её часть – это путь к интерпретатору PHP, вторая – ссылка на файл конфигурации, а третья – это путь к самому скрипту, который нам необходимо будет запускать.

Соответственно, для запуска своих скриптов, расположенных на OpenServer, вы будете менять лишь третью часть данной задачи – остальные две будут неизменными, т.к. расположение интерпретатора и файла конфигурации во всех версиях продукта одинаково.

Также создатели OpenServer учли ситуацию, когда через cron необходимо будет запустить удалённый скрипт, т.е. доступ к нему будет осуществляться по url.

В данной ситуации необходимо будет воспользоваться встроенной в OpenServer утилитой WGet. Пример такой задачи будет выглядеть следующим образом:

%progdir%\modules\wget\bin\wget.exe -q --no-cache http://sitename.com/cron.php -O %progdir%\userdata\temp\temp.txt

В данном случае файл cron.php будет запрашиваться по протоколу http и ответ будет сохраняться во временный файл temp.txt, чтобы не скапливать мусор.

http://cccp-blog.com/wp-includes/images/banners/partner_web_studio/banner_728x90.gif

Таким образом, возможно будет у себя на локальном сервере запускать удалённые скрипты и сохранять результаты их выполнения для дальнейшего анализа.

Возможность заманчивая, но в реальной практике её использование встречается не так уж и часто. Просто имейте ввиду, что данное действие возможно 😉

Возвращаясь к синтаксису задач cron OpenServer, вы могли заметить, что при описании задач допускается использовать предопределённые переменные. Они записываются в формате %переменная% и служат в качестве указателей различных директорий (каталога OpenServer, системного диска компьютера и т.д.)

С полным списком переменных и их значений вы можете познакомиться в официальной документации OpenServer.

Итак, на данном этапе вы ввели все необходимые данные для создания задачи для планировщика cron.

sohranenie-zadach-cron-openserverПеред сохранением конфигурации планировщика проверьте ещё раз список всех задач на экране настройки cron OpenServer и убедитесь, что объект с указанными вами ранее данными там присутствует.

Теперь нам остаётся нажать на кнопку «Сохранить», чтобы занести введённую нами информацию в файл конфигурации cron. После этого веб-сервер автоматически перезагрузится.

Если веб-сервер на этапе ввода задачи был остановлен, его необходимо будет запустить вручную, после чего все изменения сохраняться и задача начнёт выполняться.

zapusk-openserverПосле того, как мы добавили в cron OpenServer задачу, независимо от успешности её выполнения, автоматически начинают регистрироваться лог-файл планировщика.

Для доступа к нему необходимо в меню OpenServer выбрать пункт «Просмотр логов»:

prosmotr-logov-openserverВ открывшемся окне ищем вкладку «Планировщик заданий» и видим там следующее:

logi-planirovschika-cron-openserverКак видите, задача запустилась, причём, в путях к указанным файлам вместо внутренних переменных OpenServer появились реальные объекты.

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

Не зависимо от результатов выполнения задачи в логах постоянно пишется ошибка при чтении taskinfo.txt и выдается «result: 0».

Так что при возникновении каких-либо проблем с запуском задачи под cron OpenServer на логии надежды нет – можете не тратить время на их изучение и не прикреплять их к сообщениям на форумах и блогах 🙂

О запуске скриптов и отдельных файлов через определённые промежутки времени с помощью планировщика задач cron, входящего в комплект OpenServer, мы поговорили. Самое время рассмотреть, как можно запускать приложения с его помощью. И возможно ли это?

Запуск приложений с помощью планировщика задач cron в OpenServer

Вообще, если честно, сомневаюсь, что данная возможность предполагалась разработчиками OpenServer, когда они встраивали cron в своё детище 🙂

Об этом говорит полное отсутствие какой-либо информации по данному вопросу в официальной документации и Интернете в целом.

Скорее всего, разработчики решили не заморачиваться данным мануалом, т.к. предполагали, что для запуска приложений будут использоваться стандартные планировщики на уровне ОС.

Но, как я и говорил ранее, не все нравятся стандартные утилиты. Cron обходит Windows Task Scheduler уже, как минимум, возможностью задания гибкого расписания запуска задачи в отличие от 5-6 стандартных пунктов типа «ежедневно», «каждый месяц» и т.д.

Мне, в частности, с данной точки зрения cron нравится намного больше. Соответственно, я решил попробовать использовать его для запуска приложений Windows.

На предполагаемый вопрос «Зачем изобретать велосипед?» могу сказать, что это банально вопрос удобства. К примеру, запуск PHP-скриптов можно также произвести через стандартный планировщик, указав путь к установленному предварительно интерпретатору PHP. И зачем тогда нужен cron OpenServer, если не для удобства? 🙂

Итак, в большинстве планировщиков для запуска программы, установленной на компьютере, необходимо прописать всего лишь путь к её exe-файлу через интерфейс планировщика для создания новой задачи.

Но в случае с cron OpenServer всё оказалось не так-то просто 🙂

Для примера я решил вызывать установленную у меня на ПК известную многим утилиту CCleaner. Что я только не делал для её запуска через cron OpenServer:

    1. прописывал прямой путь к exe-файлу программы;
    2. делал ярлык экзешника и размещал его в корне диска (чтобы не было ошибки из-за пробелов в пути и названии);
    3. заключал путь в кавычки;
    4. пытался прописывать имя пользователя перед путём к CCleaner.exe.

Но, к сожалению, традиционный запуск программы ни в одном случае из перечисленных не произошёл.

На каком-то этапе, заглянув в диспетчер задач Windows, я обнаружил, что процесс CCleaner.exe запускается, причём многократно, но графической оболочки программы я на экране монитора не наблюдал.

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

Сам файл можно размещать в любой директории компьютера, но для надёжности рекомендуется использовать такой путь и имя для bat-файла, чтобы в них не было пробелов, т.к. данная задача может выполниться некорректно.

Если говорить о конкретном примере, то содержимое моего файла «D:\run.bat» было следующим:

"C:\Program Files\CCleaner\CCleaner.exe"

Причём, путь лучше указывать в кавычках, чтобы не было проблем с пробелами в Program Files и именах программ и их каталогов.

После этого я создал задачу в cron OpenServer привычным способом, после чего увидел запуск программы воочию.

zapusk-prilozhenij-windows-v-planirovschike-zadach-cron-openserverПожалуй, соглашусь, что способ не самый изящный, но, тем не менее, рабочий. Если вы знаете что-то получше – не поленитесь отписаться в комментариях под статьёй. Думаю, что ваше сообщение будет интересно прочитать не только мне, но и остальным посетителям блога.

Из всего вышесказанного сделаю краткое резюме.

Если при разработке сайтов вы пользуетесь WAMP-платформой OpenServer, то для автоматического запуска скриптов, программ и просто отдельных файлов вы можете иcпользовать встроенный планировщик задач, который основывается на стандартном для UNIX-подобных систем планировщике cron.

При этом cron OpenServer очень прост в настройке и управлении, что делает его прекрасной альтернативой стандартным решениям.

На этом сегодняшняя статья подходит к концу. Мне было бы приятно услышать ваше мнение в виде комментариев и оценок с помощью звёзд под статьёй. Ну а если вы ещё и поделитесь ею со своими друзьями в соц. сетях – то за это вообще будет полагаться медаль за вклад в развитие проекта 🙂

Подписывайтесь на обновления, следите за новостями проекта и вступайте в сообщества проекта в социальных сетях, помогая себе и другим в создании собственного сайта.

До новых встреч! 🙂

Понравилась статья? Поделись с друзьями:
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
14 голосов, в среднем: 4.6 из 5

Похожие темы

11 комментариев к статье "Настройка планировщика задач cron OpenServer"

  1. Teramoune

    Не очень оно соответствует, указываю в часах */1 типа каждый час, а оно каждую минуту срабатывает. Запись 0-23 в графе часы аналогично соответствует выполнению каждую минуту.

    А вот */59 в минутах срабатывает странным образом дважды в 59 и 00

    1. Pashaster Автор

      День добрый. Вы не могли бы привести пример Cron задачи с расписанием, которые вы создаёте? Скорее всего, у Вас что-то не так с синтаксисом.

      1. Teramoune

        Да похоже на то, мне нужно было собственно сделать выполнение раз в сутки и пробовал сделать так.
        * */23 * * * или * * 1-31 * * и получалось каждую минуту выполнение. А после этого я зарегался на бесплатном хостинге с кроном где был вариант раз в сутки и там запись была (0 0 * * *)

        Я еще не пробовал сделать так поэтому не знаю будет эта запись (0 0 * * *) соответствовать требованию один раз в сутки.

        1. Pashaster Автор

          Не волнуйтесь, всё у Вас получится 🙂 А вообще на будущее — внимательнее читайте статьи, я же не просто воду в них лью, а раскрываю разные тонкости, иногда, правда, заостряя на них слишком много внимания 🙂

          Я же описывал кратко синтаксис crontab файлов. Даже пользуясь моей шпаргалкой можно понять, что запись 0 0 * * * будет соответствовать расписанию запуска скрипта в 00:00 каждый день.

          Если хотите запускать его в другое время, то укажите минуты вместо первого нуля, и часы вместо второго. Также пользуйтесь сайтом для интерпретации расписаний CRON человеческим языком, ссылку на который я приводил в статье.

  2. Алиk

    Здравствуйте! Подскажите что надо вписать в строку — ВЫПОЛНИТЬ — если проект на ларавель? Гугл запутал полностью? То ли придерживаться настроек Openservera то ли документации Ларавель? Использую Даравель 5.3. Winows 8. Заранее спасибо.

    1. Pashaster Автор

      Доброго времени суток 🙂 По поводу использования Laravel — хороший выбор, сам уже не один сайт поднял на нём на OpenServer, в том числе и планированием задач по CRON.

      В данном случае Вам понадобится как официальная документация Laravel, так и OpenServer. Из Ларавел доки берёте вот эту строку:

      * * * * * cd /path-to-your-project && php artisan schedule:run
      

      И создаёте задачу с расписанием запуска раз в минуту для OpenServer так, как написано в статье. При этом Вам, естественно, нужно будет настроить запуск и частоту самих Cron задач в Laravel.

      При данной схеме частота выполнения задач будет той, которую Вы настроите в Laravel коде.

      1. Алик

        Большое спасибо за оперативный ответ. В папке domains Ларавель-проект «f1001» и получается в строке ВЫПОЛНИТЬ нужно вписать следующую строку:

        * * * * * cd /с:/openserver/domains/f1001 && php artisan schedule:run
        

        Правильно ли я вписал строку. Еще раз спасибо за помощь.

        1. Pashaster Автор

          Ну, почти правильно 🙂 Вот пример расписания для моего проекта cryptoStatsApp:

          * * * * * cd C:\OSPanel\domains\cryptoStatsApp && php artisan schedule:run
          

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *