About Lazy Cron (Core)
This core module provides hooks that are automatically executed at various intervals. This module is already included with the ProcessWire core, but not installed by default.
|Category 1||Other Modules|
Modules that have a unique purpose not covered by existing categories.
|Category 2||Core Modules|
Core modules are those already included with the ProcessWire core, but not necessarily installed. Most modules listed here can be installed by going to the modules screen and clicking "install" next to the module name.
Should be safe for use in production environments. *
|Compatibility||2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0|
|Date Added||July 25, 2012|
It is called 'lazy' because it's triggered by a pageview, so the interval is guaranteed to be at least the time requested (and maybe more) rather than exactly the time requested. The more pageviews your site gets, the closer it is. This is fine for most cases, but if you need it to be fully accurate I'll describe how you can make it not-lazy a little further down.
Hookable time intervals
These are the function names you can hook from LazyCron. The function names describe the time intervals they provide. If you think I'm missing any important time intervals, please let us know and we can add more.
HOW TO INSTALL LAZY CRON
LazyCron is already included with your ProcessWire installation. To install, login to your admin and click "Modules". Locate the Lazy Cron module and click the install button.
HOW TO USE LAZY CRON
This module is mainly of use inside the API and to other modules. You hook one of the named intervals mentioned in the list above, and the function you provide will be executed at approximately that time interval. Here's how you do it, both from a class (module) and outside of one:
Usage in a class/module
Procedural usage (like in a template or elsewhere in the API):
Arguments provided to the hooks
If desired, you can retrieve the number of seconds that have actually elapsed since your hooked function was last called:
Note that in production usage, you probably wouldn't want to echo anything from these hooks because they are executed after the pageview was already delivered. So while you can directly echo output from these, it's probably not that useful (other than for demonstration purposes, like this).
How Lazy Cron works
When installed, LazyCron hooks into ProcessWire's ProcessPageView::finished() method. This ensures that the scheduled tasks are executed after the pageview has already been delivered rather than before or during it. This hopefully avoids any perceived slowdown if the scheduled tasks take time.
LazyCron provides a bunch of hooks that anything else can hook into. These functions are outlined in the section above titled "Hookable time intervals." These functions are called at the interval specified in their name. LazyCron simply uses ProcessWire's existing hook system. So when you hook into any one of these functions, your hook will also be executed at that same time interval.
LazyCron hooks are only executed during pageviews that are delivered by ProcessWire. They are not executed when using ProcessWire's API from other scripts.
How to make it not-lazy
In most cases, the way that LazyCron works out of the box is just fine. But if your need requires assurance that the module will always execute at exactly the interval you need (rather than possibly later), you need to setup a real cron job to trigger a pageview in your site. So if you needed accuracy to 1 minute, you'd setup a cron job to execute every one minute, and pull a page from the site. There are any number of ways you could pull a page from your site, but here is one using wget:
That command basically says to pull a page from the site, don't tell us anything, don't cache the request, and discard any output.
- Admin Helpers
- Core Modules
- Development Tools
- Field Types
- Input Fields
- Language Modules
- Language Packs
- Markup Generation
- Premium Modules
- Process Modules
- Proof of Concept
- Site Profiles
- Social, Feeds, Services
- Text Formatters
- Other Modules
- Users and Access
*Use modules at your own risk. There are no guarantees or warranties. It is recommended that you backup your site and database before installing new modules.