Задача По Cron

Доброе время суток. Помогите разобраться с задачкой cron

Делаю на хостинге cron задачку

whet -O - http://sait.ru/cron.php?password=PASSWORD

При её выполнении выдается 500 ошибка.

тогда иду в браузер и просто ввожу

http://sait.ru/cron.php?password=PASSWORD

понятно, что вместо sait и PASSWORD реальные данные в обоих случаях.

Так вот, в браузере тоже 500 ошибку выдаёт

сам файл cron.php

<?php
use Tygh\Registry;
use Tygh\Storage;

define(‘AREA’, ‘C’);
define(‘AREA_NAME’ ,‘customer’);
require dirname(FILE) . ‘/init.php’;

if (!$_REQUEST[‘e_mailing’])
{
echo (‘You should choose cron action’);
}
if(empty($_REQUEST[‘password’])) {
echo (‘You should type the password for action
’);
}

if(($_GET[‘password’] == ‘PASSWORD’)
{
if($_REQUEST[‘e_mailing’] == ‘Y’)
{

	echo('E-mailing has been finished</br>');
}

} else {
echo(‘Wrong cron action password’);
}
?>

Что не так? Как запустить всё это безобразие?

Доброе время суток. Помогите разобраться с задачкой cron

Делаю на хостинге cron задачку

whet -O - http://sait.ru/cron.php?password=PASSWORD

При её выполнении выдается 500 ошибка.

тогда иду в браузер и просто ввожу

http://sait.ru/cron.php?password=PASSWORD

понятно, что вместо sait и PASSWORD реальные данные в обоих случаях.

Так вот, в браузере тоже 500 ошибку выдаёт

сам файл cron.php

<?php
use Tygh\Registry;
use Tygh\Storage;

define(‘AREA’, ‘C’);
define(‘AREA_NAME’ ,‘customer’);
require dirname(FILE) . ‘/init.php’;

if (!$_REQUEST[‘e_mailing’])
{
echo (‘You should choose cron action’);
}
if(empty($_REQUEST[‘password’])) {
echo (‘You should type the password for action
’);
}

if(($_GET[‘password’] == ‘PASSWORD’)
{
if($_REQUEST[‘e_mailing’] == ‘Y’)
{

	echo('E-mailing has been finished</br>');
}

} else {
echo(‘Wrong cron action password’);
}
?>

Что не так? Как запустить всё это безобразие?

У вас синтаксическая ошибка (лишняя скобка):

if(($_GET['password'] == 'PASSWORD')

Замените на:

if($_GET['password'] == 'PASSWORD')

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

Убирание скобки помогло только тем, что теперь грузится просто главная сайта.

Комментирование строки

require dirname(__FILE__) . '/init.php';

приводит опять к 500 ошибке.

Может кто-то из cs-cart напишет, как вообще с cron работать ???? Какие принципы, как правильно запустить выполнение и т.д. Жаль, что Даниила нет. Его видео очень пригодилось бы, а то сейчас как слепые котята мы возимся.

Помогите, плиз, команда cs-cart

Вот здесь
http://forum.cs-cart.com/topic/41475-custom-cron-error/?view=findpost&p=226444
есть такое:
define('AREA', 'A');
define('AREA_NAME', 'admin');
define('BOOTSTRAP', true);
define('ACCOUNT_TYPE', 'admin');
define('NO_SESSION', true);
define('CONSOLE', true);    // 6/25/15 added to prevent seo from looking for SCRIPT_FILENAME
require_once("./init.php");

явно по-другому. В общем, нужен букварь (видео Даниила) по организации cron

Сделал вот так в файле cron.php:

<?php
use Tygh\Registry;
use Tygh\Storage;

//define(‘AREA’, ‘C’);
//define(‘AREA_NAME’ ,‘customer’);
//require dirname(FILE) . ‘/init.php’;
define(‘AREA’, ‘A’);
define(‘AREA_NAME’, ‘admin’);
define(‘BOOTSTRAP’, true);
define(‘ACCOUNT_TYPE’, ‘admin’);
define(‘NO_SESSION’, true);
define(‘CONSOLE’, true); // 6/25/15 added to prevent seo from looking for SCRIPT_FILENAME
require_once("./init.php");

if (!$_REQUEST[‘e_mailing’])
{
echo (‘You should choose cron action’);
}
if(empty($_REQUEST[‘password’])) {
echo (‘You should type the password for action
’);
}

if($_GET[‘password’] == ‘password’)
{
if($_REQUEST[‘e_mailing’] == ‘Y’)
{
echo(‘909090909’);
}
else {
echo(‘Нет email рассылки’);
}
} else {
echo(‘Wrong cron action password’);
}

Запускаю в браузере.

Если указываю пароль ошибочный, то выдается надпись, что пароль ошибочный. Если параметр e_mailing ставлю = N, то также выдается что нет email рассылки. Скрипт в общем работает, но ....

когда указываю верный пароль и признак e_mailing=Y, то строка 909090909 не печатается, а выдается главная страница сайта. При этом с адресе cron.php пропадает, остаются домен сайта и параметры.

Млиииииииииииин

Как это всё работает???????

Все вы правильно делаете и код рабочий:

http://prntscr.com/9w9k6c

Если через модуль, то можно через контроллер сделать, например, как в модулях "Символ рубля и синхронизация курса валют" или "Прайс-листы"

wget -q "http://demo.cs-cart.ru/stores/108491/panel.php?dispatch=currencies_sync.sync_cron&magic_key=qqsOTxWaRdAZQ499" >/dev/null 2>&1

Все вы правильно делаете и код рабочий:

http://prntscr.com/9w9k6c

Если через модуль, то можно через контроллер сделать, например, как в модулях "Символ рубля и синхронизация курса валют" или "Прайс-листы"

wget -q "http://demo.cs-cart.ru/stores/108491/panel.php?dispatch=currencies_sync.sync_cron&magic_key=qqsOTxWaRdAZQ499" >/dev/null 2>&1

Спасибо, через dispatch помогло

Теперь, если запускаю через браузер, то всё работает как мне надо

Но если вставляю в планировщик cron в ISPManager, то ничего не выполняется

wget -q http://sait.ru/admin.php?dispatch=dispatch.emailing&password=password>/dev/null 2>&1

Что не так? В поддержку хостинга стучаться?

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

app/addons/data_feeds/schemas/permissions/trusted_controllers.post.php

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

app/addons/data_feeds/schemas/permissions/trusted_controllers.post.php

Правильно ли я понял, что в этом файлике

if (!(isset($schema['exim']['allow']) && $schema['exim']['allow'] === true)) {
    $schema['exim']['allow']['cron_export'] = true;
}

exim - это имя контроллера, в указанном модуле там стоит постконтроллер для него.

allow - это тип доступа, разрешить

cron_export - Это mode в указанном постконтроллере

Мой файл должен также лежать по пути мой аддон/schemas/permissions/trusted_controllers.post.php ???

Только вместо exim будет имя моего контроллера, к которому мне нужно предоставить доступ через cron

и вместо cron_export мой mode

Всё так?

Всё так?

Да, все верно. Не забудьте почистить системный кэш после внесения изменений

Да, все верно. Не забудьте почистить системный кэш после внесения изменений

Да. теперь скриптик в модуле запускает через cron, но никак не проходит провоерка

if($_GET['password'] == 'password')

печатаю $_GET, а в ней только dispatch=dispatch.emailing

как получить доступ к параметру password ?

Должно работать. В тех же прайс листах такая проверка

    $cron_password = Registry::get('addons.data_feeds.cron_password');
if ((!isset($_REQUEST['cron_password']) || $cron_password != $_REQUEST['cron_password']) && (!empty($cron_password))) {
    die(__('access_denied'));
}

Ну вот и я про тоже, когда просто в строке браузера запускаю, всё работает, а через cron не определяет параметр. При этом ничего не пишет толком. Может как-то можно узнать еще, по другому?

Попробуйте так

wget -q "http://sait.ru/admin.php?dispatch=dispatch.emailing&password=password" >/dev/null 2>&1

Простите, можно по шагам написать? Есть ссылка для обновления курсов валют. Открытие её прекрасно работает.
site.ru/admin.php?dispatch=currencies_sync.sync_cron&magic_key=123456789
как заставить её запускаться по расписанию? хостинг на nic.ru
Пробовал вписать wget -q и далее описанная выше команда - не работает.
Интерфейс простой:


Что именно нужно ещё поправить?

Должно работать

wget -q "http://site.ru/admin.php?dispatch=currencies_sync.sync_cron&magic_key=123456789" >/dev/null 2>&1

либо

php /path/to/cart/admin.php --dispatch=currencies_sync.sync_cron --magic_key=123456789
1 лайк

Сделал оба варианта, интервал обновления 5 минут, но курс не меняется…


Ещё где то нужно поколдовать таки?

upd. Или курс не может обновляться так же часто, как курс онлайн? (попробовал обновить по ссылке, как обычно, в браузер - тоже не изменились показания)

данные на сайте Центрального банка России обновляется каждый день в 3:00 вечера по московскому времени (UTC + 4);

1 лайк

Конечно, модуль берет курс ЦБ на текущий день

1 лайк