Как проверить, работает ли задача cron

19499
Несколько слов, как настроить и проверить задачу CRON. Данная заметка относится как к Первой Ветке, так и Второй.

О задаче cron.

Решил написать эту заметку, чтобы не потерялась информация.
Как известно, на Инстанте можно запустить задачу cron, начиная с версии 1.7 (если правильно помню). Задача запускается с сервера и может быть выполнена, даже если никого на сайте нет.

Как задача выполняется.

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

Другими словами, если вы собираетесь организовать выполнение на своем сайте какого-то своего скрипта по расписанию, вы должны настроить две независимые вещи:
1. Планировщик заданий на хостинге.
2. Задачу CRON на Инстанте.

Обычно мы настраиваем Планировщик так, чтобы указать путь к нашему инстантовскому скрипту cron.php (есть и на Первой и на Второй ветках), который лежит в корне сайта. Однако мы можем прописать Планировщику любой скрипт.

Настройки

Настройка Планировщика заданий на хостинге

Это самая муторная часть настроек задачи cron. Почему? Потому что на каждом хостинге "свои игрушки" - совершенно разные способы запуска скриптов и разные пути к интерпретатору php и разные пути к вашему сайту.

Если вы неправильно пропишите это задание для Планировщика - вы будете долго ломать голову, из-за чего возникли траблы и на каком этапе.

Поэтому рекомендую не кичиться своей квалификацией программиста и сайтоваятеля. Смело пишите в саппорт хостинга. Попросите их прислать пример строки для Планировщика заданий. В ответ они вам пришлют либо такую строку
Код CRON:
  1. * * * * * /usr/local/bin/php -n /home/user/html/cron.php
либо такую
Код CRON:
  1. wget -O - -q -t 1 http://ваш_сайт.ru/cron.php
либо такую
Код CRON:
  1. @daily php -f /var/www/user_name/data/www/ваш_сайт.ru/cron.php http://ваш_сайт.ru >/dev/null 2>&1
Все строки рабочие, только с разных хостингов. Совершенно не похожи между собой, правда? Именно поэтому не старайтесь скопировать эту строку с одного хостинга на другой, чтобы потом не удивляться, почему CRON не работает. В примерах Планировщика задач обычно есть справка. Те справки, что я до сих пор читал, были написаны на марсианском языке. Иногда буквы русские, но язык все равно марсианский. Поэтому не ковыряйтесь в дурацких справках, а сразу пишите в саппорт!

По виду строки для Планировщика (в ответе из саппорта) можно догадаться, как именно будет запускаться ваша задача cron. Если используется не cli, а wget или cURL, вам придется открыть наш инстантовский файл cron.php любым редактором и закомментировать строку
Код PHP:
  1. if(PHP_SAPI != 'cli') die('Access denied');
Если этого не сделать, задача cron не сработает, даже если Планировщик настроен правильно. (Говорю для тех, кто в танке: закомментировать строку означает поставить перед ней // - две косые черты, или слэша)

Предопределенная константа PHP_SAPI объявляется ядром php на хостинге вместе с другими константами. О том, как узнать ее значение, чуть ниже.

Немного справочной информации

CLI - Command line interface, интерфейс командной строки. Рассмотрим пример, относящийся к cli.
Еще раз посмотрите на строку
Код CRON:
  1. * * * * * /usr/local/bin/php -n /home/user/html/cron.php
Эта строка конфигурации /etc/crontab. Строка состоит из имени команды, необязательных ключей и необязательных параметров. Если есть ключи и/или параметры, они отделяются от команды и друг друга обязательными пробелами.

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

Далее через пробел идет путь к интерпретатору php. Это очень важный параметр. Если вы указали путь неправильно - ваша задача cron не сработает. Именно этот путь вам и надо "выжать" из Вашего саппорта. Потому что практика показывает, что люди, сидящие в саппорте, часто сами не знают этого пути. Они пишут в ответ всякую фигню. Просите их пригласить к разговору человека квалифицированного. Обычно это админ сервера. Только когда к переписке подключится админ сервера, только тогда вы получите нужные сведения.

После параметра "путь" через пробел стоит ключ -n, который отключает запуск ionCube. Если ваш запускаемый скрипт зашифрован ionCube, этот ключ следует убрать. Как получить описания ключей? У себя дома (на Денвере) я нашел перечень этих ключей (их двенадцать) с описаниями на английском, набрав в командной строке z:\usr\bin\php.exe -h

Для тех, кто в танке, подсказываю, что в Винде командная строка вызывается cmd.exe, будучи набранной в поле "Выполнить" (для ХР), и в поле "Найти программы" (для Семерки). Поле "Выполнить/Найти" можно открыть в любой Винде, нажав комбинацию клавиш "Win+R". У кого вместо Денвера стоит Open Server, предупреждаю, что файл php.exe может находиться и по другому адресу (в этом случае юзайте поиск).

Ну, и наконец, последний, тоже невероятно важный параметр командной строки для cli - путь к исполняемому скрипту. В данном примере, естественно, указан наш инстантовский cron.php. Вы можете запустить таким образом любой файл. Пример этого чуть ниже.

WGET - википедия вещает нам, что это свободная неинтерактивная консольная программа для загрузки файлов по сети. Вот почему во втором примере в качестве параметра указано сетевое имя вашего сайта с протоколом http:// Эта программа также поддерживает протоколы https:// и ftp://
Там же, в википедии, я нашел несколько примеров ключей.

cURL - хорошая альтернатива wget. Делает все тоже самое, что делает wget, плюс еще много чего. Смотрите википедию.

Если саппорта нет (или он несет фигню)

Но как быть, если строка Планировщика не работает, а саппорт высокомерно молчит? Или дятлы, засевшие в саппорте деревянного хостинга, несут ахинею? Например, направляют вас на тот самый FAQ (на марсианском языке), который вы уже и так вдоль и поперек изучили?

Поневоле приходится справляться самому.

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

1. В корне сайта создайте два файла:
my_cron.txt с правами 777.
my_cron.php с правами 755 или 751

Первый файл my_cron.txt (это наш лог, куда скрипт будет писать сообщения) оставьте пустым.
Второй файл my_cron.php откройте в редакторе и впишите примерно такой текст:
Код PHP:
  1. <?php
  2. $fd = fopen("/home/user/mysite_ru/my_cron.txt","a");
  3. fwrite($fd, "Обращение к файлу - ".date("d.m.Y H:i")."\r\n");
  4. fclose($fd);
  5. ?>
Как Вы уже поняли, команда fopen('path_to_log') содержит путь к логу. Часто этот путь следует указывать от корня хостинга (а не корня сайта). Естественно, на каждом хостинге (и для каждого Вашего сайта, если их несколько) этот путь будет различным.

2. Начинаем эксперименты. В Панели управления хостинга ищите Планировщик заданий (он может называться по разному). Настраиваете Планировщик заданий. Как правило, для этого в него надо добавить строку, которую вы составили по примерам, приведенным в FAQ вашего хостинга.
Например:
Код CRON:
  1. * * * * * /usr/local/bin/php -n /home/user/html/my_cron.php
Некоторые Панели управления хостингом (например, ISP) содержат кнопку для задачи cron "Запустить задачу". Если кнопки "Запустить задачу" нет, пропускаете пункт 2.1. Сразу переходите к п.3.

2.1.Если кнопка есть, нажмите на нее. Если вернулась белая страница, без всяких ответов, порадуйтесь первой победе и переходите к п.3. Если при нажатии на кнопку "Запустить задачу" появляется короткая строка вроде
Код CRON:
  1. Exited with return code = 123
значит, вернуло ошибку с кодом 123 и Планировщик не работает. Нет смысла двигаться дальше, пока есть ошибка. По коду можно узнать, что пошло не так: пишите этот код саппорту.

3. Настроив Планировщик, идите перекусите. Чаю попейте.

4. Попив чаю, заглядываете в файл my_cron.txt. Если Планировщик сработал, он запустит на выполнение Ваш скрипт my_cron.php.
Приведенный выше пример запускает скрипт my_cron.php каждую минуту. Он пишет в лог my_cron.txt строчки вроде
Код PHP:
  1. Обращение к файлу - 11.01.2014 22:13
  2. Обращение к файлу - 11.01.2014 22:14
  3. Обращение к файлу - 11.01.2014 22:15
  4. Обращение к файлу - 11.01.2014 22:16
  5. Обращение к файлу - 11.01.2014 22:17
Если видите аналогичные строчки, радуйтесь - Планировщик работает. Первая часть задачи выполнена.

Если лог пуст - значит Планировщик не работает. Вернитесь к п.2. Экспериментируйте с путями. Возможно, неправильно прописаны пути к интерпретатору php или вашему скрипту. Как их узнать? Узнать этот путь можно из phpinfo(). Для этого идите в админку Настройки -> Информация PHP.

Только когда в логе что-то появилось, имеет смысл двигаться дальше.

5. Остальное дело техники.

5.1. Следует удалить файлы my_cron.txt и my_cron.php, из корня сайта, чтобы они не лежали там в виде мусора.

5.2. Затем отредактируйте командную строку Планировщика, чтобы вместо нашего тестового скрипта my_cron.php был прописан скрипт Инстанта cron.php.

5.3. Скорее всего, придется еще перенастроить время срабатывания Планировщика.

Звездочки, которые мы видим, обозначают:
Минуты Часы Дни_месяца Месяц День_недели

Вместо звездочек можно ставить точные цифровые значения, диапазон или перечень. Диапазон указывается через дефис (например, 1-4 означает 1,2,3,4), перечень указывается через запятую, например, 1,2,3,4)

Примеры настроек временных интервалов Планировщика
каждый час (точнее, каждую нулевую минуту, которая раз в час бывает):
Код CRON:
  1. 0 * * * * /usr/local/bin/php -n /home/user/html/cron.php
или
каждые полчаса (точнее, каждую нулевую и тридцатую минуту):
Код CRON:
  1. 0, 30 * * * * /usr/local/bin/php -n /home/user/html/cron.php
или
каждый день (точнее, каждый нулевой час, сиречь полночь):
Код CRON:
  1. * 0 * * * /usr/local/bin/php -n /home/user/html/cron.php
или
каждый день в 8:15 утра:
Код CRON:
  1. 15 8 * * * /usr/local/bin/php -n /home/user/html/cron.php
или
каждое воскресенье в 12:00
Код CRON:
  1. 00 12 * * 7 wget http://site_name.com/test-cron.php
и так далее. Думаю, теперь понятно.

Иногда вместо звездочек для каждого часа следует прописывать @hourly, каждый день - @daily и так далее. Я же говорю - не пытайтесь угадать, как должна выглядеть правильная строка планировщика, а сразу пишите в саппорт!

Только после того, как Планировщик задач на хостинге заработал и Вы его настроили, можно перейти к следующей части - настройки CRON на Инстанте.

Если задача CRON движка все равно не запускается

Иногда бывает, что Планировщик на хостинге срабатывает, наш тестовый скрипт my_cron.php успешно пишет в лог, а задача cron все равно не выполняется. И Первая и Вторая ветки в корнях содержат файл cron.php. Одна из первых строчек этого файла выглядит так:

Код PHP:
  1. if(PHP_SAPI != 'cli') { die('Access denied'); }
Как мы видим здесь проверяется значение предопределенной константы PHP_SAPI. Эта константа объявляется самим ядром PHP на хостинге и переопределить мы ее не можем. Зато можем узнать ее значение. Это можно сделать несколькими способами. Выбирайте любой, какой вам больше нравится.

Как узнать значение PHP_SAPI

1. Записать в лог. Аналогично, как мы делали выше, но в в файл my_cron.php добавляем строчку
Код PHP:
  1. fwrite($fd, 'PHP_SAPI = '.PHP_SAPI."\r\n");
2. Вывести в браузер. В любом месте файла index.php (как Первой, так и Второй ветки, находится в корне) добавляем строчку
Код PHP:
  1. echo 'PHP_SAPI = '; print_r(PHP_SAPI);
На одном из хостингов, где я держу один из своих сайтов мне вывело, например:
PHP_SAPI = cgi-fcgi
Поскольку задачу крон на этом сайте мне запускать не надо, то и фиг с ним.

Но если надо, нужно:
- либо выкручивать руки хостеру, чтобы сконфигурировал вам ядро PHP вместе с cli,
- либо закоментировать строчку
Код PHP:
  1. if(PHP_SAPI != 'cli') { die('Access denied'); }
что крайне не рекомендуется

Некоторые продвинутые хостинги позволяют юзеру самому сконфигурировать себе ядро PHP, выставляя галки напротив соответствующих модулей в Панели управления аккаунтом. Кроме cli можно включить, например, mb_string, IonCube и другие примочки, без которых наш Инстант не сможет работать полноценно.

Задача CRON на InstantCMS 1.х.х

Теперь, когда вы уверены, что Планировщик работает, останется:
- создать задачу CRON InstantCMS и
- написать скрипт, который будет выполняться на сайте от задачи CRON нашего движка.

Создание скрипта - задачи cron для Инстанта Первой ветки

Начнем со скрипта. Откройте папку(в Первой ветке это includes/myphp/), где уже лежит файл, поставляемый вместе с движком - includes/myphp/test.php. Напишите скрипт с именем my_cron.php (или любым другим, исходя из своей задачи, здесь my_cron.php для примера) и положите его рядом с test.php. Содержание этого файла пропишите таким:
Код PHP:
  1. <?php
  2. $fd = fopen("my_cron.txt","a");
  3. fwrite($fd, "Обращение к файлу - ".date("d.m.Y H:i")."\r\n");
  4. fclose($fd);
  5. ?>
Обратите внимание, что здесь путь не указан. Это сделано намерено. Параметр "а" в команде fopen() автоматически создает файл, если его нет. Этим можно воспользоваться для наших целей. В зависимости от настроек хостинга файл автоматически создастся либо в корне сайта, либо в той папке, где лежит файл my_cron.php.

Если файл НЕ создался, надо искать причину.

Подсказка, как проверить задачу CRON движка без Планировщика

Проверить связку my_cron.php - my_cron.txt можно очень быстро и очень просто, даже не используя CRON.
Воспользуемся фильтрами Инстанта.

Возьмите любую статью и откройте ее на редактирование. В ней в любом месте вставьте запускающую конструкцию фильтра: {ФАЙЛ=my_cron.php}. Сохраните статью.

Стоит вам открыть эту статью для чтения, фильтр сработает. Он запустит includes/myphp/my_cron.php, а тот пропишет в my_cron.txt строчку
Код PHP:
  1. Обращение к файлу - 11.01.2014 22:14...
и так далее.

Если НЕ сработало:
- разбирайтесь с путями
- возможно, потребуется изменить cmod папки, где должен создаться файл.

Убедившись, что связка my_cron.php + my_cron.txt работает, можете удалить файл my_cron.txt, а my_cron.php переименовать сообразно Вашей задачи. Не забудьте из статьи удалить фильтр.
Открывайте свой будущий скрипт редактором и творите. Тут все зависит от вашего мастерства программиста.

Добавление задач

Теперь создаем задачу cron САМОГО Инстанта. Идем в админку, Настройки->Задачи CRON. Нажимаем зеленый плюсик. В открывшейся форме отвечаем на простые вопросы, а в поле Скрипт прописываем путь к нашему скрипту и его имя. Остальные поля оставляем незаполненными - они нам пока не нужны.

Наш скрипт должен работать.

Немного о том, как работает задача cron на Инстанте

Наш скрипт cron.php инициализирует ядро и все ядерные классы. Затем загружает из БД перечень задач CRON. Получается массив, каждый элемент которого - задача CRON. Файл cron.php перебирает массив, поэтому эти эти задачи последовательно выполняются.

Все задачи хранятся в БД в таблице cms_cron_jobs. Каждая запись - это отдельная задача.

Использование ядерных методов движка при запуске задачи CRON на Первой ветке.

Если вы зашли в админке в задачу cron, то можете увидеть поля для запуска некоторых ядерных методов движка.

Следует отметить, что далеко не все методы ядра могут быть выполнены таким образом. Например метод getHost() может быть вызван из командной строки сервера (читай, по команде Планировщика), поскольку имеет код, позволяющий обработать данные, полученные с сервера. А вот, к примеру, метод checkMenuAccess() у вас не сработает, поскольку работает с сессией. А какая сессия, если скрипт запускается не от браузера-клиента, а прямо с сервака? Суперглобальный массив $_SERVER не определен. Переменные окружения вообще не определены. Сессия не запущена.

Помните, прописывая в задачу cron методы ядра на исполнение, вы можете получить их неисполнение. Аналогично, если вы указали подходящий вам метод из модели компонента, понадеявшись, что он сработает по задаче cron и вернет данные, будте готовы испить горькую чашу разочарования. Здесь Вам не обойтись без досконального знания не только самого нашего InstantCMS, но и CGI.

Задача CRON на InstantCMS 2.х.х

Теперь, когда вы уверены, что Планировщик работает, останется создать задачу CRON InstantCMS 2.

1. Пишем скрипт. Скрипт должен находиться в папке system/controllers/имя_вашего _компонента/hooks/. Имя скрипту даете сами, но он должен обязательно начинаться на cron_: например, cron_my_script.php.

2. Идем в админку Панель управления -> Настройки -> Планировщик.

Нажмите зеленый плюсик и заполните поля.
- Поле "Описание". Сюда можете написать любой текст.
- Поле "Компонент". Укажите системное имя компонента. Если свой пишите, сюда добавьте имя своего компонента.
- Поле "Хук". Укажите имя скрипта (хука) - того самого, который вы создали немного раньше. В поле надо вписывать НЕ полное имя скрипта, а с отброшенным префиксом cron_. То есть для скрипта с именем cron_my_script.php вы указываете имя хука my_script.php.
- Поле "Период". Укажите период в минутах.
- Галка "Задача активна" Поставьте галку если хотите, чтобы задача была включена.

Как быть, если в скриптах, которые Вы написали, орфографические ошибки?

Никто из нас не безгрешен. Программируя, я всегда включаю вывод ошибок в браузер. Их видно моментально. Но куда выводить ошибки, которые возникли в скриптах, запущенных от Планировщика заданий? Ведь скрипты срабатывают не по запросу браузера!

Для этого на многих хостингах предусмотрена такая фича: все сообщения отправляются на чей-нибудь почтовый ящик. Обязательно укажите свой ящик в настройках Планировщика. Тогда Вы будете получать от него сообщения интерпретатора php. Те самые, которые он, в случае обнаружения ошибки, отправляет в браузер.

Правда, эта штука будет забивать вам ящик и при успешном срабатывании задачи cron, сообщениями вроде:
X-Powered-By: PHP/5.3.29
Content-type: text/html
Чтобы этого не происходило, добавьте в конец строки Планировщика на хостинге, через пробел, команду >/dev/null 2>&1.
Например:
Код CRON:
  1. * * * * * /usr/local/bin/php -n /home/user/html/my_cron.php >/dev/null 2>&1
Точный вид команды узнайте у саппорта своего хостинга.

.

P.S. Я тут на днях порезвился и написал такой скрипт - у меня работает)))

Куда говорить "спасибо" за статью

яд 410011913797936
Скрипт автопостинга в Твиттер статьи с отложенной публикацией | Фильтр "Скрыть текст от гостей"
Комментарии (49)
Олег Васильевич я 18 апреля 2014 в 11:28 +1
small user social cms
Теперь у нас есть новый аргумент для беседы со службой поддержки: если немедленно не настроите, я на вас Странника натравлю! laugh
Кирилл Эдуардович (Странник) 18 апреля 2014 в 11:41 +1
small user social cms
Да что вы такое говорите, что я монстр, что ли? Для этого у нас используются Локанафт и Летсго. rofl
Майкл 18 апреля 2014 в 16:48 0
small user social cms
Локанафта прошу не обижать joke
Олег с клещами 18 апреля 2014 в 14:47 +2
small user social cms
Добавил в закладки
reload 18 апреля 2014 в 18:04 +1
small user social cms
Написано вроде много, но читается очень легко)
Доступно, понятно, полезно - плюс.
Правда "недокументированная возможность" вполне документирована) если не ошибаюсь)
Кирилл Эдуардович (Странник) 18 апреля 2014 в 21:18 0
small user social cms
Если натыкаете носом, где это описано в документации, с радостью исправлю, посыпав голову пеплом))
reload 18 апреля 2014 в 21:53 0
small user social cms
справочник-фильтр
Кирилл Эдуардович (Странник) 19 апреля 2014 в 10:07 0
small user social cms
Вообще-то речь шла не о подключении фильтра к статье.
Речь шла о проверке задачи cron через фильтр. Это и есть недокументированная возможность. Я думал, кто-то до меня это опубликовал, а вы эту публикацию нашли. Оказалось, нет. Читайте внимательно мою заметку.
reload 19 апреля 2014 в 15:45 0
small user social cms
а что мы напишем в вызываемом файле? вариантов много?
Кирилл Эдуардович (Странник) 19 апреля 2014 в 10:35 0
small user social cms
К тому же если вы внимательно посмотрите на автора той заметки, в которую меня хотите натыкать носом, то окажется, что автором является Ваш покорный слуга. То есть вы тыкаете меня носом в мою же заметку, которую я и написал накануне. Забавно, не находите?
reload 19 апреля 2014 в 15:49 0
small user social cms
Спасибо
reload 18 апреля 2014 в 21:58 0
small user social cms
Спойлер
reload 18 апреля 2014 в 22:02 0
small user social cms
пепел?
Кирилл Эдуардович (Странник) 5 июня 2015 в 14:39 0
small user social cms
Еще раз повторяю, Вы тыкаете меня носом в мою же заметку. )))) Смотрите мой коммент выше.
Владимир Савенко 5 июня 2015 в 14:53 +1
small user social cms
Дружище, чегой то поднял тему и отвечаешь на пост годичной давности?))) Запарка?
Кирилл Эдуардович (Странник) 5 июня 2015 в 15:03 +1
small user social cms
Не))) делаю сайт и настраиваю задачу крон. Естественно, полез в свой блог за готовым решением. А тут вижу - у человека непонятки....Ну и ответил. Лучше поздно, чем никогда!
reload 28 декабря 2015 в 23:41 0
small user social cms
Общение во времени?) ну лады smile

Странник:
у человека непонятки...

Ну какие же там непонятки? для меня все прозрачно и понятно,
даже Fuze (19 апреля 2014) поддержал меня:

Fuze:
как правильно заметил reload, все вполне документировано и ожидаемо

Возможно я и не прав, но меня радует что я не один, нас как минимум двое - я и Fuze !)
Кирилл Эдуардович (Странник) 28 декабря 2015 в 23:53 +1
small user social cms
Это было в апреле 14 года, а сейчас уже через три дня 16 год будет. Со временем люди обычно умнеют, а сведения, изложенные два года назад устаревают. Следовательно, у меня нет причин принимать вашу аргументацию, которая устарела.
reload 29 декабря 2015 в 00:29 +1
small user social cms
laugh круто)

Не знаю что там было в 14-ом но в 15-ом вы мне ответили, я решил поддержать разговор, так сказать)

А на счет устаревшей аргументации - это как? Таблица Пифагора уже не актуальна? ))

Вы своего мнения не поменяли с годами, чего вы думаете что другие должны "умнеть"? )))

Тем более у вас просто мнение, а у меня аргументация была! laugh

А вообще забейте - а то ща не дай бог поссоримся перед 2016 НГ за то что было в 2014 )

Повторю что никого не пытался переубедить, процитирую себя и далекого:

пс: с моей стороны это ни в коем случае не спор, просто описываю как я понимаю это вопрос
Кирилл Эдуардович (Странник) 29 декабря 2015 в 01:20 0
small user social cms
reload:
Таблица Пифагора уже не актуальна?
На пространстве комплексных чисел - не актуальна. Как видите, со временем даже бесспорные истины могут быть подвергнуты фальсификации.
Rainbow 18 апреля 2014 в 21:17 0
small user social cms
Полезно, спасибо.
Fuze 19 апреля 2014 в 14:05 +2
small user social cms
Как проверить, работает ли задача cron
После создания нового задания в планировщике CRON, зайти в админку InstantCMS и посмотреть меняются ли у заданий даты последнего запуска.
Речь шла о проверке задачи cron через фильтр. Это и есть недокументированная возможность
Фильтр запускает просто любой php скрипт, в вашем случае это скрипт, который выполняется заданием cron потому, что вы так захотели. Поэтому, как правильно заметил reload, все вполне документировано и ожидаемо. В заданиях cron могут быть доступны для выполнения не только сторонние php скрипты, но и методы общих классов и моделей.
Если используется не cli, а wget или cURL, вам придется открыть наш инстантовский файл cron.php любым редактором и закомментировать строку
не нужно этого делать. эта проверка сделана как раз для того, чтобы перестали наконец ставить задания через wget, curl, etc. При запуске cron.php посредством http обращений работает модуль apache и как следствие конфигурация php для него. Это накладывает в 90% случаев ограничения на время выполнения скрипта. В конфигурации php cli лимит на время выполнения в тех же 90% случаев отсутствует, а задачи cron в большинстве своем требуют достаточное кол-во времени на выполнение.
Все добавляется из админки, Настройки->Задачи CRON. Нажать зеленый плюсик.
В большинстве случаев это сгодится как раз для сторонних скриптов. Разработчики же могут пользоваться следующим:
Код PHP:
  1. cmsCore::loadClass('cron');
  2. if(!cmsCron::getJob('job_name', false)){
  3. cmsCron::registerJob('job_name', array(
  4. 'interval' => 0, // задачи с нулевым интервалом будут выполнятся при каждом запуске задачи на сервере
  5. 'component' => '',
  6. 'model_method' => '',
  7. 'comment' => 'Описание задачи',
  8. 'custom_file' => '',
  9. 'enabled' => 1,
  10. 'class_name' => '',
  11. 'class_method' => ''
  12. ));
  13. }
По поводу добавления заданий cron на шаред-хостингах. Практически на каждом из них есть мануал как добавить задание - нужно просто зайти в раздел документации и изучить. Если у шаред хостера нет раздела с документацией, то в 99% случаев это реселлер (барыга если по-русски), причем самого низшего звена и качества. От таких хостеров нужно уходить.
А на linux сервере создание задачи сводится как правило в ее добавлении как через командный интерфейс cron, например:
1. авторизуемся в системе под тем пользователем, от которого хотим добавить задание
2. вводим crontab -e
3. в открывшемся файле добавляем/редактируем/удаляем задачи
4. сохраняем изменения.

Или же редактируем непосредственно файлы планировщика, которые лежат как правило по пути /var/spool/cron/crontabs. Названия файлов равны именам пользователей, для которых подготовлены эти задания, т.е. в этой директории будет лежать например файл с названием "root" - где список задач, выполняемых от пользователя root, файл "www-data" со списком задач для пользователя www-data и т.п.
Пример задачи, выполняемой каждые 5 минут:
Код BASH:
  1. 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/bin/php -f /path_to_site/sitename.ru/cron.php sitename.ru > /dev/null
Александр 20 апреля 2014 в 11:36 0
small user social cms
я делал через crontab -e , что то даже сохраняться не хотело, но не важно через sftp добавил ручками сохранил проверил, а как теперь, что будет лежать в темп папке или как? и ваше точно будет запускаться и работать период поставил 23 часа

* */23 * * * /usr/bin/php -f /var/www/ename.uz/cron.php >/dev/null
Кирилл Эдуардович (Странник) 20 апреля 2014 в 14:29 0
small user social cms
Александр, не могу из вашего поста понять ни одной мысли. Будьте добры, откажитесь от марсианского языка, изложите, что хотели, по русски. Спасибо. Надеюсь, без обид.
Александр 21 апреля 2014 в 13:27 0
small user social cms
Давайте попробую))) плюс какие обиды я наоборот очень рад, что кто то мне хочет помочь.
Смысл прост захожу через ssh, грубо говоря если ввожу вот так "/usr/bin/php -f /var/www/ename.uz/cron.php >/dev/null" все работает запускается и конечно видно в админке, но это всего 1 раз. я хоте бы, что б каждый раз сам он это делал как у нормальных людей))) , а не ручками через админку или 1 строкой(хотя одной строкой тоже лучше, за 2.5 года - практичней чем каждую задачу отдельно запускать).

Сделал как сказал уважаемый Fuze запустил крон через команду в ssh crontab -e -> выходит синие меню окошечко, вроде все ясно стараюсь добавить не получаеться сохраниться и выйти. я пошел даже через sftp сам отредактировал через нотепад++ и вписал
"* */23 * * * /usr/bin/php -f /var/www/ename.uz/cron.php >/dev/null" что вроде означает запускать каждые 23 часа правильно? я подождал и вроде ничего не запустилось, как лежало в папке темп та и лежит))) подумав если вы хотите мне помочь, за что я вам очень благодарен может подскажите как добавить в папку /var/spool/cron/crontabs , может там она(задача) будет работать на моей впс linux(debian 6)
заранее спасибо!

P.S. C праздником всех поздравляю, Христос воскрес!
Кирилл Эдуардович (Странник) 21 апреля 2014 в 16:15 +1
small user social cms
мммм...почему такой странный период, 23 часа?
поставьте
Код PHP:
  1. 1 1 * * * /usr/bin/php -f /var/www/ename.uz/cron.php >/dev/null
чтоб было раз в сутки. Один час вас точно не спасет))) А чтобы не ждать сутки, сделайте, как в примере у FuZe, каждые 5 минут
И вы уверены, что пути правильно прописали? Вы вроде про папку темп говорили - ее не каждый хостер дает, и лежит, у тех хостеров, что я юзал, вне сайта...
Кирилл Эдуардович (Странник) 21 апреля 2014 в 16:16 0
small user social cms
Когда вы будете уверены, что задача каждые пять минут срабатывает, когда и переводите на сутки...
Александр 23 апреля 2014 в 00:36 0
small user social cms
да она вне сайта, у меня грубо говоря не хостинг, а виртуальный сервер(вдс/впс) ну как я понимаю у меня сейчас впс линукс стоит на ней(уже говорил про дебиан)
а куда мне вписывать, точнее куда поставить?
Александр 24 апреля 2014 в 01:12 0
small user social cms
а как суда добавить? /var/spool/cron/crontabs может если суда добавлю заработает так как из командной строки ssh работает, но единоразово, через кронтаб по таймеру почему то не хочет запускаться ваше.
Кирилл Эдуардович (Странник) 24 апреля 2014 в 01:25 0
small user social cms
Александр, заметка написана в предположении, что задача cron запускается из той Панели управления виртуальным хостингом, где есть Планировщик заданий.
Вы же спрашиваете, как настроить кронтаб дебиана.
Я не стыжусь признаться, что недостаточно компетентен в этом вопросе, поскольку все знать нельзя. Но, полагаю, раз у вас впс, вы представляете себе разницу между впс и виртуальным хостингом. Поэтому рекомендую вам создать тему на форуме: у нас множество чрезвычайно компетентных лиц в настройке *nix подобных систем, думаю, вам помогут.
locosmo 14 января 2015 в 00:31 +1
small user social cms
Искал про то как в Денвер(Denwer) запускать периодические задачи и попался этот пост. Полного раскрытия темы не нашел в инете и в статье документации локальная_установка_денвер. Ниже о том как настроить периодический запуск задач (cron.php в InstantCMS на Денвер) с помощью стандартного Windows-планировщика.

- Путь к Планировщику в WIndows - пригодится для отладки - “Панель управления\Все элементы панели управления\Администрирование\Планировщик заданий” (вместо cron/nncron)
- командный режим Планировщика - schtasks.exe
- Использовал две команды Планировщика: Create - создать задачу, Delete - удалить задачу
- чтобы помощь по этим командам была под рукой сохранил в файлы - “schtasks.exe /Create /? >create.txt” и “schtasks.exe /Delete /? >delete.txt”

Сценарий: При запуске Денвер создавать задачу в планировщике, при остановке Денвер - удалять задачу. при перезапуске
Для этого 2 батника в папке z:\denwer (c:\WebServers\denwer):
Код PHP:
  1.  
  2. [b]Run.bat[/b]
  3. @echo off
  4. schtasks.exe /Create /TN i1_Cron /SC MINUTE /MO 1 /TR C:\WebServers\denwer\RunTasks.cmd /F
  5. Run.exe
  6.  
Stop.bat
@echo off
schtasks.exe /Delete /TN i1_Cron /F
Stop.exe

RunTasks.cmd
@echo off
c:\WebServers\usr\bin\php5.exe z:\home\i1\www\my_cron.php
[/code]

содержание my_cron.php из основного поста (выше) - удобно для тестирования. Как заработает можно менять на целевой cron.php и поставить рекомендуемые 5 минут вместо одной в параметре /MO 1 планировщика при создании задачи.

NB:
1. у меня Планировщик “не видит” виртуального диска (если напрямую в нем указывать команду запуска php5 + my_cron) - поэтому запускаю php с С: - c:\WebServers\usr\bin\php5.exe. Хотя при этом видит как параметр файл my_cron на Z:
2. При отладке c:\WebServers\usr\bin\php5.exe z:\home\i1\www\my_cron.php вылезали ошибки типа:
для этого в php.ini
- прописал абсолютный путь в параметре extension_dir = "Z:\usr\local\php5\ext"
- закомментил error_prepend_string = "<!--error-->", error_append_string = "<script language=JavaScript src='/denwer/errors/phperror_js.php'></script>"
3. При запуске задачи планировщиком мелькает черное окно - попробовал использовать скрипт из http://forum.ixbt.com/topic.cgi?id=22:59101, но не получилось
locosmo 14 января 2015 в 00:33 0
small user social cms
zst прошу прощения за кривое форматирование - первый раз пишу - не нашел предпрсмотра и после публикации коммента нельзя отредактировать
Кирилл Эдуардович (Странник) 14 января 2015 в 06:03 +1
small user social cms
Спасибо за сведения, наверняка кому-то пригодится.
Скорпион 14 января 2015 в 11:37 0
small user social cms
А может стоит задуматься о другом тестовом полигоне? Где и крон нормальный есть, и развитие проекта продолжаеться да и вообще все по взрослому.
Я тоже долго долго сидел на денвере, и даже терпел его остановку развития......но отсутствие эмуляции того же фтп доступа меня в конец убил.
Рекомендую глянуть Open Server и забыть о всех.....ну или по крайней мере почти всех пооблемах.
locosmo 14 января 2015 в 12:37 0
small user social cms
встретил аналог Денвера [url=как аналог Денвера встретил http://www.ampps.com/wiki/Main_Page]http://www.ampps.com/wiki/Main_Page[/url], но сам не пробовал.
locosmo 14 января 2015 в 12:40 0
small user social cms
ссылка http://www.ampps.com/wiki/Main_Page - вместо кривой выше
Кто-то пробовал - какие впечатления?
Скорпион 14 января 2015 в 19:38 0
small user social cms
Я в свое время озадачился сравнением всей этой тестовой братии, уже даже и не вспомню где и по каким критериям сравнивал.
И про этого зверька помню читал, но что-то мне не понравилось в нем и в его всевозможных "братьяподобных".
Если вспомню - найду - кину ссылку.
Скорпион 14 января 2015 в 19:41 +1
small user social cms
О! дедушка Гугл первой же строчкой выдал тот материал - http://habrahabr.ru/post/144242/
Да-да - на хабре это было.
Почитай - там и сравнительная табличка (люблю я такие таблички) имеется.
Только обрати внимание - статья бородатая.
Кирилл Эдуардович (Странник) 14 января 2015 в 12:49 0
small user social cms
Ну, в данном случае каждый исходит из своих предпочтений. Статья написана для тех, кто хочет настроить задачу cron на хостинге, а тут человек поделился данными о планировщике заданий для Винды. Хоть не совсем в тему, но тем не менее, кому-то пригодится.
Скорпион 14 января 2015 в 19:34 0
small user social cms
Да я не в претензиях.....просто любим мы сначала создать себе проблему, а потом её гордо преодолевать :)
locosmo 15 января 2015 в 15:47 0
small user social cms
Денвер - это то что первое попалось под руку - в рунете альтернатив не встретил. При этом заработало сразу.
Легко обновил PHP до 5.6.4, причем нашел видео как это сделать. При этом я впервые все это делаю - не устанавливал раньше ничего сам.
shaman888 12 июля 2015 в 14:22 0
small user social cms
с чем может быть связанна ошибка выдаваемая кроном в ICMS2.2.1:
Скрытый текст виден только зарегистрированным пользователям
Кирилл Эдуардович (Странник) 12 июля 2015 в 18:45 0
small user social cms
Понятия не имею за отсутствием кода)))) Какая-то синтаксическая ошибка. Первое что бросилось в глаза - отсутствие символа < перед ?php.
А вообще для таких вопросов существует форум. Нет?
Lora 14 апреля 2016 в 13:12 +2
small user social cms
+ Добавил в закладки,спасибо за столь содержательную, не грех сказать, статью.
vsemkrot 27 сентября 2016 в 14:58 -1
small user social cms
Ребята подскажите некоторые задачи выполняются а некоторые нет!! если некоторые выполняются значить планировщик на сервере настроен правильно, а вот почему другие не работают!!??
Олегсей 2 декабря 2016 в 10:37 0
small user social cms
Здравствуйте.
Добавляю задачу в Планировщик на хостинге. Саппорт тугой, сразу говорю - mirahub, одним словом.
Включена отправка логов по почте.
Сама задача вот такая
Код PHP:
  1. /var/www/user12230/data/php-bin -n /var/www/user12230/data/www/mydomain.com/my_file.php
Саппорт гасится, и не говорит ничего, поэтому, пути /var/www/user12230/data/лалала прописывал согласно собственному пониманию
Видимо, где-то что-то не так понял, поскольку, файл my_file.php не срабатывает, а на почту приходят письма с таким содержанием
Код PHP:
  1. /bin/sh: /var/www/user12230/data/php-bin: Is a directory
Подскажите, пожалуйста - куда копать?
Олегсей 2 декабря 2016 в 10:55 0
small user social cms
Понял, на что он ругался, дописал вот так
Код PHP:
  1. /var/www/user12230/data/php-bin/php -n /var/www/user12230/data/www/mydomain.com/my_file.php
Теперь приходит другая ошибка
Код PHP:
  1. /dev/zero: Cannot allocate memory
  2. Failed creating file mapping
  3. PHP Fatal error: Failed creating file mapping in Unknown on line 0
  4. PHP Fatal error: XCache: Cannot create shm in Unknown on line 0
  5. PHP Fatal error: XCache: Cannot init in Unknown on line 0
  6. X-Powered-By: PHP/5.4.16
  7. Content-type: text/html
Олегсей 2 декабря 2016 в 11:42 0
small user social cms
Попробовал уже даже через GET и wget, не запускается, т.к. https ((((
Олегсей 2 декабря 2016 в 11:56 +2
small user social cms
Решил вопрос.
Может кому пригодится. Итак
планировщик cron настроить хостинг mirahub можно с помощью wget
Код PHP:
  1. wget -q -O - http://yourdomain.com/yourscript.php
работает как с http так и https