Выбрать курс
15  /  17

CRON

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

Для тех, кто все же имеет эти знания, поехали...

Создайте файл sitemapGen.php в папке /local/php_interface/ (если такой папки нет, ее нужно создать).
<?php
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../..");
 
$pass = "СЮДА ВБИТЬ ПАРОЛЬ";
 
if($pass == "СЮДА ВБИТЬ ПАРОЛЬ" && !is_cli()) die('Защита от дурака, переменная $pass не установлена.');
$access = false;
 
function is_cli()
{
	if( defined('STDIN'))return true;
	if( empty($_SERVER['REMOTE_ADDR']) and !isset($_SERVER['HTTP_USER_AGENT']) and count($_SERVER['argv']) > 0) return true;
	return false;
}
 
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
include_once($_SERVER["DOCUMENT_ROOT"]. "/bitrix/modules/main/include/prolog_before.php");
set_time_limit(0);
 
if(is_cli() || $_GET["PWD"] == $pass)
	$access = true; 
 
CModule::IncludeModule("solverweb.sitemap");
 
if($access)
	if(SWSitemapGenerate::Generate() == NULL) echo "OK";
 else
	include $_SERVER["DOCUMENT_ROOT"]."/404.php";
?>
Дальше есть 2 варианта запуска, это через интерпретатор или через wget (на самом деле вариантов больше, но придумать в каких вариантах они могут пригодиться, мы не смогли).

Запускаем через интерпретатор в режиме PHP CLI

Это более сложный способ, но более правильный.

Заходим в SSH.

Пишем "whereis php", выбираем из вариантов тот, который используется на сайте и прописываем в CRON команду:



Прописываем в Cron строку вида:

/opt/php74/bin/php /var/www/domain/data/www/domain/local/php_interface/sitemapGen.php

Периодичность выбирайте сами, исходя из ваших потребностей.

Запускаем через wget

Это более простой способ, но менее правильный. Просто запускаем в крон команду.

wget -O /dev/null -q https://domain/local/php_interface/sitemapGen.php?PWD=<Пароль>
У такой реализации есть свои плюсы, например, если на сервере нет крона вообще, можно поставить с другой машины (да-да, в 2020 году не у всех хостингов есть CRON) или слова SSH, интерпретатор вызывают беличий транс. Но есть и свои минусы, которые не очень имеет смысл расписывать.

Для этого способа обязательно нужно установить пароль в переменной $pass файла sitemapGen.php, иначе он работать не будет! После чего зайдите по ссылке https://domain/local/php_interface/sitemapGen.php?PWD=&lt;Пароль&gt; и убедитесь, что все работает. Если вы все сделали верно, вы получите в ответ ОК.