@monyavitevna

Есть php скрипт, надо записать его в крон. как сделать?

Здравствуйте!
Есть скрипт php, необходимо записать в крон. пробую запустить с помощью командной строки, ошибка. Код и ошибка ниже:
<?php
if(CModule::IncludeModule("iblock") && CModule::IncludeModule("catalog")) 
{
   echo "Скрипт запущен...<br />";

   $newExtraId = 6; // ID нашей наценки
   $newPriceId = 2; // ID типа цены, для которого задаём эту наценку
   $catalogIblockType = "offers"; // код типа инфоблока, для которого проводим обработку

   $count = 0;
   $rsProducts = CCatalogProduct::GetList(
      array("ID" => "ASC"),
      array("IBLOCK_TYPE" => $catalogIblockType),
      false,
      false
   );
   while (($arProduct = $rsProducts->Fetch())/* && $count < 10*/) {
      $arPriceFields = Array(
         "PRODUCT_ID" => $arProduct["ID"],
         "CATALOG_GROUP_ID" => $newPriceId,
         "EXTRA_ID" => $newExtraId,
         "CURRENCY" => "RUB",
      );
      $rsProductPrices = CPrice::GetList(
         array(),
         array(
            "PRODUCT_ID" => $arProduct["ID"],
            "CATALOG_GROUP_ID" => $newPriceId
         )
      );
      if ($arProductPrice = $rsProductPrices->Fetch()) {
         if (CPrice::Update($arProductPrice['ID'], $arPriceFields, true) !== false) {
            print "Обновлена цена ".$arProductPrice['ID']." для товара ".$arProduct["ID"]."<br />";
         }
         else {
            print "Ошибка при обновлении цены ".$arProductPrice['ID']." для товара ".$arProduct["ID"].": ";
            if ($ex = $APPLICATION->GetException())
               echo $ex->GetString();
            echo "<br />";
         }
      }
      else {
         $priceId = CPrice::Add($arPriceFields, true);
         if ($priceId !== false) {
            print "Добавлена новая цена для товара ".$arProduct["ID"]." ".$priceId."<br />";
         }
         else {
            print "Ошибка при добавлении цены для товара ".$arProduct["ID"].": ";
            if ($ex = $APPLICATION->GetException())
               echo $ex->GetString();
            echo "<br />";
         }
      }

      $count++;
   }
   echo "Скрипт завершён. Обработано ".$count." товаров.";
}
?>
Ошибка: "Uncaught Error: Class 'CModule' not found "
  • Вопрос задан
  • 2183 просмотра
Решения вопроса 1
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Добавьте в начало:

$_SERVER["DOCUMENT_ROOT"] = '/home/bitrix/www';
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
gromdron
@gromdron
Работаю с Bitrix24
Для начала, ознакомьтесь с имеющийся документацией: https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
Внизу странице (по ссылке выше) есть код агента, исполняющегося под cron. Он подойдет.

Первое на что нужно обратить внимание: константа SITE_ID. Если предполагается работа из админ панели, то это константа языка, иначе - константа сайта (лучше задать вручную)
Второе: проверьте $_SERVER["DOCUMENT_ROOT"] (если у Вас bitrix vm то это скорее всего тот же путь)
И третье - вместо echo в cli режиме лучше использовать: fwrite( STDOUT, 'Строка' );
Ответ написан
Комментировать
Есть прекрасный пример в /bitrix/modules/main/tools/cron_events.php
Ну а дальше PHP CLI.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы