View Single Post
  #9  
Old 06-15-2001, 06:33 AM
Mas*Mind's Avatar
Mas*Mind Mas*Mind is offline
 
Join Date: Oct 2001
Location: Amsterdam, The Netherlands, currently living in Cape Town, South Africa
Posts: 103
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

the way I though of it was:

make an extra table cronjobs

with the following fields:

ID, (the unique ID)
includeFile, (the file to be included, containing the necesary functions)
lastExecuted, (timestamp on which the cron was last executed to determine if it should be executed or not.)
busy (a flag to set it on busy to ensure no 2 users will execute the same job concurrently)

then in global.php add an extra query:

select * from cronjobs where (lastExecuted - unix_timestamp()) > 24*60*60

then loop through each cronjob, set busy to 1 and include includeFile. when finished the includeFile should set lastExecuted to the current timestamp.:

while($DB_site->fetch_array($results))
{$DB_site->query("UPDATE cronjobs SET busy = 1 where ID = $result[ID]";
include($results[includeFile]);
}

drawbacks:

-an extra query (on every page)
-it's not ensured that the semi-cronjob is executed (allthough highly likely: the more visitors a day, the more likely)
-one visitor a day should experience the extra load of including the include file

but I agree with you: it may be sufficient to only in clude the croncheck on ONE particular page instead of every page so that the extra query isn't included in every page...

possible pages to perform the check:

-usercp
-register
-search
-pm

The thing I like about this is that you can make it kinda modular. You can built in a cp-function to insert/edit/maintain a new semi-cronjob and it'll work immediately. People can create their own cronjobs and share them amongst people. No code of vb would be touched.
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01166 seconds
  • Memory Usage 1,765KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete