phpbb и системный cron
Posted: 2015-02-28 22:20:05, Sat
Задача
Запускать встроенный в phpBB планировщик не дожидаясь посетителей на форуме.
История
Так повелось, что phpBB внимательно следит за своим планировщиком, внедряя в нужный момент в исходный код страницы ссылку на картинку с адресом /cron.php и аргументом, указывающим на желаемую запланированную процедуру. Одну за раз. У этого способа есть пара очевидных недостатков:
Решение
Через cron вызывать wget с адресом планировщика форума, указывая желаемую для выполнения процедуру.
Лирическое отступление
Прочитали? Сделали?
Удаляйте нафиг!
Начиная с версии 3.1 доска имеет консольную точку входа. Лежит она в файле /bin/phpbbcli.php относительно каталога установки конференции. Запуск сценария без аргументов или с привычным флагом --help подробнее расскажет как им можно пользоваться. Нам достаточно только одного ключа - cron:run
Открываем кронтаб (см выше как свою и как чужую) и заменяем строку нашего велосипеда на человеческую:Поправьте путь установки конференции и/или расположения исполняемого файла php если я не угадал.
Всё. Вот теперь как у людей.
Подвальчик СЭО
phpbb cron linux crontab command line interface cron.php cli
Запускать встроенный в phpBB планировщик не дожидаясь посетителей на форуме.
История
Так повелось, что phpBB внимательно следит за своим планировщиком, внедряя в нужный момент в исходный код страницы ссылку на картинку с адресом /cron.php и аргументом, указывающим на желаемую запланированную процедуру. Одну за раз. У этого способа есть пара очевидных недостатков:
- малопосещаемый форум (вроде этого клозета) будет очень-очень редко пробуждать планировщик и некоторые очень полезные функции будут ожидать своей очереди практически бесконечно долго.
- поисковые боты не запускают крон. Очевидно, доска не "показывает" им ссылку на картинку планировщика.
- боты ёбаных спамеров (tm) вообще ничего кроме атакуемых скриптов не посещают.
Решение
Через cron вызывать wget с адресом планировщика форума, указывая желаемую для выполнения процедуру.
- Создаем список типичных процедур форума phpBB:
Code: Select all
$ touch /home/user/forum-cron.tasks - Открываем список типичный процедур форума phpBB любимым редактором.
- Вставляем список... ну вы поняли:Шарпы в начале строк "комментируют" имя процедуры, исключая её выполнение.
Code: Select all
# cron.task.core.tidy_search
# cron.task.core.tidy_cache
cron.task.core.tidy_sessions
# cron.task.core.tidy_warnings
# cron.task.core.tidy_database
# cron.task.core.prune_notifications
cron.task.core.queue - Сохраняем-закрываем.
- Создаем простой Bash-сценарий и делаем его исполняемым:
Code: Select all
$ touch /home/user/forum-cron.bash && chmod +x /home/user/forum-cron.bash - Наполняем содержанием:Логика простая:
Code: Select all
#!/bin/bash
TASKS=`cat $(dirname $0)/forum-cron.tasks`;
FORUM_CRON_URL_PREFIX=http://example.com/forum/cron.php?cron_type=
SLEEPTIME=0;
for TASK in `echo "${TASKS}" | grep -v '^#'`; do
sleep $SLEEPTIME;
SLEEPTIME=5;
wget -qO - ${FORUM_CRON_URL_PREFIX}${TASK} > /dev/null;
done- Прочитали файл со списком процедур.
- В цикле вызываем URL процедуры, которая естественно не была закомментирована диезом (шарпом, #).
- Делаем 5 секунд паузы между вызовами.
- Осталось закинуть в системный планировщик.
- Открываем свой:Или
Code: Select all
$ crontab -e - Открываем чужой:
Code: Select all
# crontab -u login -e
- Открываем свой:
- Планировщик будет запускать сценарий запуска планировщика каждые пять минут начиная с первой (второй!) (это 01,06,11,16,21,26,31,36,41,46,51,56):
Code: Select all
01-56/5 * * * * /home/user/forum-cron.bash
Лирическое отступление
Прочитали? Сделали?
Удаляйте нафиг!
Начиная с версии 3.1 доска имеет консольную точку входа. Лежит она в файле /bin/phpbbcli.php относительно каталога установки конференции. Запуск сценария без аргументов или с привычным флагом --help подробнее расскажет как им можно пользоваться. Нам достаточно только одного ключа - cron:run
Открываем кронтаб (см выше как свою и как чужую) и заменяем строку нашего велосипеда на человеческую:
Code: Select all
1-56/5 * * * * cd /var/www/path/to/forum/bin/ && /usr/bin/php -f ./phpbbcli.php cron:runВсё. Вот теперь как у людей.
Подвальчик СЭО
phpbb cron linux crontab command line interface cron.php cli