Пропустить

[FAQ] cron.php

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

[FAQ] cron.php

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

Как с помощью cron.php выполнять скрипты по расписанию, если конечно это возможно с помощью этого файла
Здесь на форуме я что то ничего не нашел :(
Аватара пользователя
Leviafant
phpBB 2.0.0
 
Сообщения: 113
Зарегистрирован: 23.01.2007 22:45
Откуда: Курск
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

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 раз.
Причина: Пропущен открывающий апостроф.
Изображение
За это сообщение автора rxu поблагодарили: 2
Garret_Dark (12.10.2011 17:31), velo (02.11.2010 13:21)
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7314
Зарегистрирован: 12.05.2006 17:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 251 раз.

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);

Наверное в новой версии форума чтото изменилось?
- Так... казнить нельзя, помиловать тоже нельзя... Что же будем делать?
- Пытать, Ваше Величество. Пытать можно.
Аватара пользователя
Garret_Dark
phpBB 2.0.20
 
Сообщения: 696
Зарегистрирован: 11.01.2009 15:18
Благодарил (а): 90 раз.
Поблагодарили: 47 раз.

Re: [FAQ] cron.php

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

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

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

Re: [FAQ] cron.php

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

Исправил, спасибо.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7314
Зарегистрирован: 12.05.2006 17:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 251 раз.

Re: [FAQ] cron.php

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

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

Вспоминая опыт использования других движков сайтов и форумов, там в инструкции писалось запускать этот файл каждые 24 часа, а для phpbb ничего такого не нашёл.
Хобби: охота, рыбалка, машины... и работа!
Аватара пользователя
misterleks
phpBB 2.0.6
 
Сообщения: 252
Зарегистрирован: 20.08.2010 14:09
Откуда: Великий Новгород
Благодарил (а): 29 раз.
Поблагодарили: 11 раз.

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
Аватара пользователя
nissin
Поддержка
Поддержка
 
Сообщения: 1390
Зарегистрирован: 16.12.2007 14:01
Откуда: Павлодар
Благодарил (а): 1 раз.
Поблагодарили: 117 раз.

Re: [FAQ] cron.php

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

Нет, я ничего не тёр. Теперь всё ясно, почему у меня в админке процессы запускаются от разных имён. А можно в него как-нибудь бекапы базы прописать, чтобы он создавал их автоматом (3 штуки) и поочерёдно затирал при создании новой?
Хобби: охота, рыбалка, машины... и работа!
Аватара пользователя
misterleks
phpBB 2.0.6
 
Сообщения: 252
Зарегистрирован: 20.08.2010 14:09
Откуда: Великий Новгород
Благодарил (а): 29 раз.
Поблагодарили: 11 раз.

Re: [FAQ] cron.php

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

In Web We Trust
За это сообщение автора Айдар поблагодарил:
misterleks (22.03.2011 19:06)
Аватара пользователя
Айдар
Модератор
Модератор
 
Сообщения: 1906
Зарегистрирован: 14.12.2010 16:15
Откуда: KZN
Благодарил (а): 115 раз.
Поблагодарили: 193 раз.

Re: [FAQ] cron.php

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

Вот это - $use_shutdown_function - убрано в последних версиях движка. Поэтому вместо:
		if ($use_shutdown_function)
		{
			register_shutdown_function('my_cron_function');
		}
		else
		{
			my_cron_function();
		}

Будет теперь просто:
		my_cron_function();

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


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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы
cron