Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[FAQ] cron.php

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Leviafant
phpBB 1.4.4
Сообщения: 106
Стаж: 17 лет 2 месяца
Откуда: Курск
Поблагодарили: 1 раз
Контактная информация:

[FAQ] cron.php

Сообщение Leviafant »

Как с помощью cron.php выполнять скрипты по расписанию, если конечно это возможно с помощью этого файла
Здесь на форуме я что то ничего не нашел :(
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: cron.php

Сообщение rxu »

Для этого необходимо выполнить ряд действий.
1) создать параметр конфигурации, задающие периодичность выполнения скрипта. Для этого необходимо присвоить имя переменной и задать её значение - в секундах (это и будет периодичность выполнения скрипта). Допустим, переменную произвольно назовем my_script_gc. Внести её можем напрямик в базу, добавив в таблицу phpbb_config строку, где config_name будет равно my_script_gc, а config_value равно, например, 60 (т.е. периодичность - ежеминутно). Например

Код: Выделить всё

INSERT INTO phpbb_config (config_name, config_value) VALUES ('my_script_gc', '60');
В папке cache удалим кэш глобальных значений конфигурации - файл data_global.php.

2) Аналогично, создаем значение для хранения времени последнего выполнения нашей крон-функции, оно будет динамическим (т.е. не кэшируемым):

Код: Выделить всё

INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('my_script_last_gc', '0', 1);

3) Добавляем задание в крон для периодического выполнения. При этом допустим, что наш скрипт, содержащий необходимую для выполнения функцию my_cron_function, называется my_cron.php и находится в папке includes. Реализуем:

Код: Выделить всё

OPEN
cron.php

FIND
	case 'prune_forum':

BEFORE, ADD
	case 'my_cron_function':

		if (time() - $config['my_script_gc'] <= $config['my_script_last_gc'])
		{
			break;
		}
		
		include_once($phpbb_root_path . 'includes/my_cron.' . $phpEx);

		if ($use_shutdown_function)
		{
			register_shutdown_function('my_cron_function');
		}
		else
		{
			my_cron_function();
		}

	break;
4) В файле includes/functions.php находим функцию page_footer, в ней задаем условия для срабатывания крона, например:

Код: Выделить всё

OPEN
includes/functions.php

FIND
		else if (time() - $config['session_gc'] > $config['session_last_gc'])
		{
			$cron_type = 'tidy_sessions';
		}

AFTER, ADD
		else if (time() - $config['my_script_gc'] > $config['my_script_last_gc'])
		{
			$cron_type = 'my_cron_function';
		}
При этом важно сначала отладить правильную работу самой функции, запуская её напрямую без условий, например, в отдельном скрипте. Иначе, если при ее выполнении будут возникать ошибки, работа крона в целом может быть нарушена.

Важное замечание: в обязательном порядке в самом конце функции, вызываемой в кроне (в нашем случае, my_cron_function), должно записываться в таблицу конфигурации время последнего выполнения функции. В нашем случае (для примера)

Код: Выделить всё

set_config('my_script_last_gc', time(), true);
Проверить, какая именно задача выполняется кроном в данный момент, можно, просмотрев исходный код главной страницы в браузере, в самом низу его (в футере) можно нати строку (если в этот момент выполняется крон) наподобие

Код: Выделить всё

<img src="./cron.php?cron_type=my_cron_function" width="1" height="1" alt="cron" /></div>
Последний раз редактировалось rxu 15.02.2011 16:52, всего редактировалось 1 раз.
Причина: Пропущен открывающий апостроф.
Изображение
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1096
Стаж: 15 лет 2 месяца
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение Garret_Dark »

rxu писал(а):

Код: Выделить всё

INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES (my_script_last_gc', '0', 1);
На это ругается phpmyadmin...

Код: Выделить всё

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '', '0', 1)' at line 1
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES (ip_script_last_gc', '0', 1);
Наверное в новой версии форума чтото изменилось?
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение Shredder »

Garret_Dark
Ничего не изменилось, просто в примере перед my_script_last_gc открывающего апострофа не хватает.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение rxu »

Исправил, спасибо.
Изображение
Аватара пользователя
misterleks
phpBB 2.0.9
Сообщения: 715
Стаж: 13 лет 7 месяцев
Откуда: Великий Новгород
Благодарил (а): 103 раза
Поблагодарили: 38 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение misterleks »

В корне форума лежит файл cron.php нужно его запускать по расписанию? И что он будет делать, если нужно запускать.

Вспоминая опыт использования других движков сайтов и форумов, там в инструкции писалось запускать этот файл каждые 24 часа, а для phpbb ничего такого не нашёл.
Продаю комиксы, продаю инструмент, продаю товары для охоты и рыбаков... и администрирую форум!
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2208
Стаж: 16 лет 3 месяца
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение nissin »

Он сам запускается, при заходе пользователей/гостей на конференцию, если в шаблонах его запуск не потёрли.
styles/prosilver/template/overall_footer.html

Код: Выделить всё

	<!-- IF not S_IS_BOT -->{RUN_CRON_TASK}<!-- ENDIF -->
Всё повторяется. nurlan.info
Аватара пользователя
misterleks
phpBB 2.0.9
Сообщения: 715
Стаж: 13 лет 7 месяцев
Откуда: Великий Новгород
Благодарил (а): 103 раза
Поблагодарили: 38 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение misterleks »

Нет, я ничего не тёр. Теперь всё ясно, почему у меня в админке процессы запускаются от разных имён. А можно в него как-нибудь бекапы базы прописать, чтобы он создавал их автоматом (3 штуки) и поочерёдно затирал при создании новой?
Продаю комиксы, продаю инструмент, продаю товары для охоты и рыбаков... и администрирую форум!
Аватара пользователя
Айдар
Former team member
Сообщения: 1687
Стаж: 13 лет 3 месяца
Откуда: KZN
Благодарил (а): 93 раза
Поблагодарили: 189 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение Айдар »

In Web We Trust
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение Shredder »

Вот это - $use_shutdown_function - убрано в последних версиях движка. Поэтому вместо:

Код: Выделить всё

		if ($use_shutdown_function)
		{
			register_shutdown_function('my_cron_function');
		}
		else
		{
			my_cron_function();
		}
Будет теперь просто:

Код: Выделить всё

		my_cron_function();
Аватара пользователя
boloto
phpBB 1.4.4
Сообщения: 126
Стаж: 14 лет 5 месяцев
Благодарил (а): 57 раз
Поблагодарили: 10 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение boloto »

А подскажите как проверить какие функции есть сейчас у cron-a на форуме. Когда они срабатывают и срабатывают ли вообще? Есть у меня опасения, что крон после переезда на новый сервер сбоит. (в частности перестали отрабатываться авто-группы)
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1096
Стаж: 15 лет 2 месяца
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение Garret_Dark »

boloto, последний абзац второго сообщения... проверяйте, если функция "висит" постоянно одна и таже, то значит в ее выполнении ошибка, если проходят "по кругу" (циклически), то все хорошо.

Что означает "авто-группы" ? мод или стандартная функция переноса из группы "Новые пользователи"?
Если мод, то проверьте его установку.
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 14 лет 4 месяца
Благодарил (а): 43 раза
Поблагодарили: 506 раз
Контактная информация:

Re: [FAQ] cron.php

Сообщение Pazh »

boloto
Время последних запусков каждого из заданий крона:

Код: Выделить всё

select * from `phpbb_config` where config_name like '%_last_gc'
Интервалы запуска крона для каждого задания:

Код: Выделить всё

SELECT * FROM `phpbb_config` where config_name like '%_gc' and config_name not like '%_last_gc'
Текущее состояние крона:

Код: Выделить всё

SELECT * FROM `phpbb_config` where config_name = 'cron_lock'
если результат 0 - то крон "спит" - значит все задания выполняются согласно графика без ошибок, если не 0, то будет значение "XXXXпробелYYYY" где XXXX - это время последнего запуска задания, YYYY - это уникальный ID

В случае если XXXX довольно старое (а точнее больше разницы текущего времени и самого большого значения из интервалов) - то значит крон заткнулся. Причин может быть 2: ошибка в коде функции задания крона или ошибка в обрабатываемых данных заданием
Помощь в ЛС/email только за WM или ЮMoney
Закрыто

Вернуться в «Для авторов (phpBB 3.0.x)»