[FAQ] cron.php

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

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

[FAQ] cron.php

Сообщение Leviafant » 14.03.2009 22:10

Как с помощью cron.php выполнять скрипты по расписанию, если конечно это возможно с помощью этого файла
Здесь на форуме я что то ничего не нашел :(

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14535
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 348 раз
Поблагодарили: 1556 раз

Re: cron.php

Сообщение rxu » 15.03.2009 6:50

Для этого необходимо выполнить ряд действий.
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
Сообщения: 1091
Зарегистрирован: 11.01.2009 15:18
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 203 раза

Re: [FAQ] cron.php

Сообщение Garret_Dark » 15.02.2011 15:03

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
Сообщения: 2177
Зарегистрирован: 14.12.2008 10:18
Благодарил (а): 211 раз
Поблагодарили: 547 раз

Re: [FAQ] cron.php

Сообщение Shredder » 15.02.2011 15:33

Garret_Dark
Ничего не изменилось, просто в примере перед my_script_last_gc открывающего апострофа не хватает.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14535
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 348 раз
Поблагодарили: 1556 раз

Re: [FAQ] cron.php

Сообщение rxu » 15.02.2011 16:52

Исправил, спасибо.
Изображение

Аватара пользователя
misterleks
phpBB 2.0.9
Сообщения: 715
Зарегистрирован: 20.08.2010 15:09
Откуда: Великий Новгород
Благодарил (а): 103 раза
Поблагодарили: 37 раз

Re: [FAQ] cron.php

Сообщение misterleks » 22.03.2011 17:31

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

Вспоминая опыт использования других движков сайтов и форумов, там в инструкции писалось запускать этот файл каждые 24 часа, а для phpbb ничего такого не нашёл.
Продаю комиксы, продаю инструмент, продаю товары для охоты и рыбаков... и администрирую форум!

Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2181
Зарегистрирован: 16.12.2007 14:01
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз

Re: [FAQ] cron.php

Сообщение nissin » 22.03.2011 18:04

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

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

	<!-- IF not S_IS_BOT -->{RUN_CRON_TASK}<!-- ENDIF -->
Всё повторяется. nurlan.info

Аватара пользователя
misterleks
phpBB 2.0.9
Сообщения: 715
Зарегистрирован: 20.08.2010 15:09
Откуда: Великий Новгород
Благодарил (а): 103 раза
Поблагодарили: 37 раз

Re: [FAQ] cron.php

Сообщение misterleks » 22.03.2011 18:38

Нет, я ничего не тёр. Теперь всё ясно, почему у меня в админке процессы запускаются от разных имён. А можно в него как-нибудь бекапы базы прописать, чтобы он создавал их автоматом (3 штуки) и поочерёдно затирал при создании новой?
Продаю комиксы, продаю инструмент, продаю товары для охоты и рыбаков... и администрирую форум!

Аватара пользователя
Айдар
Former team member
Сообщения: 1687
Зарегистрирован: 14.12.2010 16:15
Откуда: KZN
Благодарил (а): 94 раза
Поблагодарили: 189 раз

Re: [FAQ] cron.php

Сообщение Айдар » 22.03.2011 18:56

In Web We Trust

Shredder
Former team member
Сообщения: 2177
Зарегистрирован: 14.12.2008 10:18
Благодарил (а): 211 раз
Поблагодарили: 547 раз

Re: [FAQ] cron.php

Сообщение Shredder » 28.10.2011 18:47

Вот это - $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
Зарегистрирован: 29.09.2009 16:41
Благодарил (а): 57 раз
Поблагодарили: 10 раз

Re: [FAQ] cron.php

Сообщение boloto » 18.11.2012 23:20

А подскажите как проверить какие функции есть сейчас у cron-a на форуме. Когда они срабатывают и срабатывают ли вообще? Есть у меня опасения, что крон после переезда на новый сервер сбоит. (в частности перестали отрабатываться авто-группы)

Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1091
Зарегистрирован: 11.01.2009 15:18
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 203 раза

Re: [FAQ] cron.php

Сообщение Garret_Dark » 19.11.2012 2:30

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

Что означает "авто-группы" ? мод или стандартная функция переноса из группы "Новые пользователи"?
Если мод, то проверьте его установку.

Аватара пользователя
Pazh
Former team member
Сообщения: 2194
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 41 раз
Поблагодарили: 454 раза

Re: [FAQ] cron.php

Сообщение Pazh » 19.11.2012 10:01

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 или ЯД

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