форум vBSupport.ru > vBulletin > vBulletin 3.8.x > Вопросы по vBulletin 3.8
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Yoskaldyr
Специалист
Default Не до конца отрабатывают крон задачи
2

В общем сабж.
Есть некоторые крон задачи, которые отрабатывают не до конца, ни ошибок, ни предупреждений в логах нет.
Например, повышения пользователей. Каждый час отрабатывают повышения (судя по логам крона в админке) для 2 или 3 пользователей. но если запустить сразу после этого крон задачу из админки, то найдется еще 2 или 3 пользователя для которых повышение не отработало. Как следствие за день набирается около 20 пользователей для которых не отработало повышение.
Заметил что такие проблемы возникают для любых тяжелых крон задач (по cpu и по времени), но из админки ведь отрабатывает нормально, а по обычному крону нет...
В шаблонах крон везде есть (если бы не было - то не работал бы вообще).

Судя по форуму на vbulletin.org подобная проблема встречается на версиях 3.6, 3.7 и 3.8 (может и на более ранних, но на 3.6 - 3.8 точно), но вразумительного ответа так никто и не дал.

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

Оффтоп

Last edited by Yoskaldyr : 08-22-2009 at 02:48 PM.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
Лео
В Черном списке
 
Лео's Avatar
Default
0

Согласен vb 3.8.2 RSS импорт по крону не работает. Приходится в ручную запускать
 
 
Yoskaldyr
Специалист
Default
0

Да... Видать мало крупных форумов (на небольших такая проблема не проявляется)
Придется переписывать крон, сравнивать с тем как задачи из админки запускаются...
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

Переписывайте. Но этой проблемы на крупных форумах нет.
 
 
Yoskaldyr
Специалист
Default
2

Quote:
Originally Posted by netwind View Post
Переписывайте. Но этой проблемы на крупных форумах нет.
Видать не так выразился... Это плавающая проблема - и на небольшом форуме ее 100% не будет. На крупных появляется и то редко, просто на офф.форуме vbulletin у тех у кого она появляется, никто не описал конфиг сервера, поэтому нельзя выявить хоть какую либо зависимость.

Yoskaldyr добавил 25.08.2009 в 15:32
Как я и предполагал ошибка в коде (иногда просто удивляюсь как разрабы желсофта гонят)

Типичная логическая ошибка разработки программы и как оказалось не в самом кроне а файле повышений пользователей promotion.php. Этот код будет правильно работать только если крон булки прикрепить к системному крону и то будет очень небольшая вероятность что не отработают некоторые пользователи.
PHP Code:
$promotions $vbulletin->db->query_read("
    SELECT user.joindate, user.userid, user.membergroupids, user.posts, user.reputation,
        user.usergroupid, user.displaygroupid, user.customtitle, user.username, user.ipoints,
        userpromotion.joinusergroupid, userpromotion.reputation AS jumpreputation, userpromotion.posts AS jumpposts,
        userpromotion.date AS jumpdate, userpromotion.type, userpromotion.strategy,
        usergroup.title, usergroup.usertitle AS ug_usertitle,
        usertextfield.rank
    FROM " 
TABLE_PREFIX "user AS user
    INNER JOIN " 
TABLE_PREFIX "userpromotion AS userpromotion ON (user.usergroupid = userpromotion.usergroupid)
    LEFT JOIN " 
TABLE_PREFIX "usergroup AS usergroup ON (userpromotion.joinusergroupid = usergroup.usergroupid)
    LEFT JOIN " 
TABLE_PREFIX "usertextfield AS usertextfield ON (usertextfield.userid = user.userid)
    " 
iif(VB_AREA != 'AdminCP'"WHERE user.lastactivity >= " . (TIMENOW - ($nextrun TIMENOW)))
); 
просто поражает конструкция
PHP Code:
user.lastactivity >= " . (TIMENOW - ($nextrun - TIMENOW))) 
Конечно понятно, что не удобно из логов крона брать точное время предыдущей успешной отработки данной задачи, но так точно рассчитывать и без минимальной погрешности... А если еще время задач будет изменено на не равные интервалы времени (а не как по умолчанию раз в час), то тогда вообще может у больше половины пользователей не отработают повышения.
более детально в данный момент смотреть код и базу не хочу, решение ниже, сделанное на коленке - просто добавление небольшого запаса по точности, последние строчки будут выглядеть так:
PHP Code:
    " . iif(VB_AREA != 'AdminCP', "WHERE user.lastactivity >= " . (TIMENOW - intval(1.1*($nextrun - TIMENOW))))
); 
Значение 1.1 можно увеличить при низкой посещаемости форума до 1.5
P.S. Понятно что это немного утяжелит задание, но зато все повышения пройдут и не надо вручную запускать в админке

Yoskaldyr добавил 25.08.2009 в 15:38
Раз есть ошибка в повышениях пользователей, то и в других крон задачах могут быть подобные косяки

-------------
И еще:
строку
PHP Code:
 "WHERE user.lastactivity >= " . (TIMENOW intval(1.1*($nextrun TIMENOW)))) 
не стоит понимать буквально, смысл выражения TIMENOW - intval(1.1*($nextrun - TIMENOW))) в том чтобы гарантированно захватить период прошлого успешного запуска данной задачи и это должен решать сам админ исходя из посещаемости форума и частоты отработки крона (например, крон не всегда может отработать из-за неправильной обработки заголовков No-Cache браузером или проксей), также крон не отработает при каких либо ajax функциях (но отработает lastactivity для пользователя) - так как нет обновления страницы и как результат нет обращения к cron.php. Более точно частоту обращений к cron.php нужно смотреть по логам вебсервера. Т.е. условие в некоторых частных случаях может выглядеть и так:
PHP Code:
 "WHERE user.lastactivity >= " . (TIMENOW 300 - ($nextrun TIMENOW))) 
т.е. добавлен запас точности в 5 минут.

Last edited by Yoskaldyr : 08-26-2009 at 02:44 PM. Reason: Добавлено сообщение
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

Quote:
Originally Posted by Yoskaldyr View Post
А если еще время задач будет изменено на не равные интервалы времени (а не как по умолчанию раз в час)
все ясно. в багтрекере обычно такое кончается вердиктом "work as designed" (переводиться обычно как "сам дурак").
попробуй запостить ради интереса.
 
 
Yoskaldyr
Специалист
Default
0

Quote:
Originally Posted by netwind View Post
все ясно. в багтрекере обычно такое кончается вердиктом "work as designed" (переводиться обычно как "сам дурак").
попробуй запостить ради интереса.
Да я и не собираюсь - нафиг мне это надо
И я понимаю что они так специально сделали (не зря стоит проверка на то что задача запускается из админки - явно как раз для того чтобы запускать повышения для таких неотработанных пользователей), но хоть где-нибудь бы написали что именно так оно должно работать. И сделали бы нормальную документацию как привязать крон булки к системному крону через cli php или вообще убрали бы из кода проверку на системный крон и cli режим...
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

Проверка на запуск из админки нужна чтобы нельзя было просто перейти по урл задачи и запустить ее как скрипт. Никакой нормальной документации на левые трюки не будет. Зачем фирме нужен гемморой по их поддержке?
 
 
Yoskaldyr
Специалист
Default
0

Quote:
Originally Posted by netwind View Post
Проверка на запуск из админки нужна чтобы нельзя было просто перейти по урл задачи и запустить ее как скрипт.
Я говорил об этой проверке:
PHP Code:
iif(VB_AREA != 'AdminCP'"WHERE user.lastactivity >= " . (TIMENOW - ($nextrun TIMENOW))) 
а проверка что бы нельзя было запустить напрямую php скрипт вот это
PHP Code:
error_reporting(E_ALL & ~E_NOTICE);
if (!
is_object($vbulletin->db))
{
    exit;

и именно здесь нет никакой привязки к админке.
Дальше обсуждать тему не вижу смысла, т.к. свою проблему я решил и надеюсь если у кого возникнет похожая ситуация это хоть немного поможет.
Оффтоп

Yoskaldyr добавил 26.08.2009 в 13:48
Добавил описание проблемы и ее решения в этом посте

Last edited by Yoskaldyr : 08-26-2009 at 02:49 PM. Reason: Добавлено сообщение
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

Yoskaldyr, так и не понял. в типичном случае, если не изменять время запуска и запускать крон как и было задумано, проблема возникает?
Вообще не понимаю в чем претензия. Весь интервал разделен на равные промежутки времени. Любой пользователь попадет в тот или иной промежуток. Если пользователь на форуме не появляется - нахрен он не нужен крону и его данные обрабатываться не будут.
Что по-твоему не так? Откуда ты придумал погрешность?
 

Tags
cron, повышения


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 08:55 AM.


Powered by vBulletin® Version vBSupport Edition
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.