Execute WordPress cron events in parallel.
Docket CronWP is a command-line tool for executing WordPress cron events in parallel.
This tool is part of the Docket Cache project.
- UNIX-like environment
- PHP >= 7.2.5
- WordPress >= 5.4
- PHP pnctl extension
Download the docket-cronwp.phar using wget
or curl
.
wget https://github.com/nawawi/docket-cronwp/raw/main/bin/docket-cronwp.phar
Next, check the Phar file to verify that it’s working:
php docket-cronwp.phar --help
To use docket-cronwp.phar
from the command line by typing cronwp
, make the file executable and move it to somewhere in your PATH. For example:
chmod +x docket-cronwp.phar
sudo mv docket-cronwp.phar /usr/local/bin/cronwp
Disable the built in WordPress cron in wp-config.php
:
define( 'DISABLE_WP_CRON', true );
Updating to the latest version:
sudo wget https://github.com/nawawi/docket-cronwp/raw/main/bin/docket-cronwp.phar -O /usr/local/bin/cronwp
sudo chmod +x /usr/local/bin/cronwp
$ cronwp -h
Docket CronWP v1.2.
Execute WordPress cron events in parallel.
Usage:
docket-cronwp.phar [<path>|<options>]
Path:
Path to the WordPress files.
Options:
-p --path <path> Path to the WordPress files.
-j --jobs <number> Run number of events in parallel (default: 3).
-u --url <url> Multisite target URL.
-a --run-now Run all cron event.
-t --dry-run Run without execute cron event.
-q --quiet Suppress output.
-v --verbose Display additional output.
--debug Display debugging output.
-V --version Display version.
-h --help Display this help message.
Run WordPress cron with 3 events execute in parallel:
cronwp /path-to/wordpress --jobs 3
Or within the WordPress installation directory.
cronwp --jobs 3
Output:
Executed the cron event 'wp_privacy_delete_old_export_files' in 0.000s
Executed the cron event 'wp_https_detection' in 0.004s
Executed the cron event 'wp_version_check' in 3.476s
Executed the cron event 'wp_update_plugins' in 2.721s
Executed the cron event 'wp_update_themes' in 0.004s
Executed the cron event 'recovery_mode_clean_expired_keys' in 0.000s
Executed the cron event 'wp_scheduled_delete' in 0.001s
Executed the cron event 'delete_expired_transients' in 0.000s
Executed the cron event 'wp_site_health_scheduled_check' in 2.932s
Run with additional output:
cronwp /path-to/wordpress --jobs 3 --verbose
Output:
Docket CronWP : 1.0.8
Path : /path-to/wordpress
Jobs : 3
Executed the cron event 'wp_privacy_delete_old_export_files' in 0.001s
pid : 23093
hook : wp_privacy_delete_old_export_files
time_gmt : 2021-07-04 09:26:01
timer_start : 1625390761.8847
timer_stop : 1625390761.8853
status : success
Executed the cron event 'wp_https_detection' in 0.004s
pid : 23094
hook : wp_https_detection
time_gmt : 2021-07-04 09:26:01
timer_start : 1625390761.907
timer_stop : 1625390761.9111
status : success
Executed the cron event 'wp_version_check' in 3.468s
pid : 23096
hook : wp_version_check
time_gmt : 2021-07-04 09:26:01
timer_start : 1625390761.9313
timer_stop : 1625390765.3998
status : success
Executed the cron event 'wp_update_plugins' in 2.666s
pid : 23098
hook : wp_update_plugins
time_gmt : 2021-07-04 09:26:05
timer_start : 1625390765.4321
timer_stop : 1625390768.0978
status : success
Executed the cron event 'wp_update_themes' in 0.005s
pid : 23100
hook : wp_update_themes
time_gmt : 2021-07-04 09:26:08
timer_start : 1625390768.1265
timer_stop : 1625390768.1311
status : success
....
Run with debugging output:
cronwp /path-to/wordpress --jobs 3 --run-now --quiet --debug
Output: ( # Timestamp : Label : PID : Message )
# 1625731052.7421 : Process-begin : 53132 : Processing 15 events, where every 3 events are run in parallel.
# 1625731052.7432 : Forked : 53133 : for event 'docketcache_gc'
# 1625731052.7434 : Callback-begin : 53133 : for event 'docketcache_gc'.
# 1625731052.7833 : Callback-done : 53133 : for event 'docketcache_gc'.
# 1625731052.8051 : Parent-closed : 53133 : for event 'docketcache_gc'.
# 1625731052.8063 : Forked : 53134 : for event 'docketcache_watchproc'
# 1625731052.8064 : Callback-begin : 53134 : for event 'docketcache_watchproc'.
# 1625731052.8501 : Callback-done : 53134 : for event 'docketcache_watchproc'.
# 1625731052.8698 : Parent-closed : 53134 : for event 'docketcache_watchproc'.
# 1625731052.8709 : Forked : 53135 : for event 'wp_privacy_delete_old_export_files'
# 1625731052.8710 : Callback-begin : 53135 : for event 'wp_privacy_delete_old_export_files'.
# 1625731052.8715 : Callback-done : 53135 : for event 'wp_privacy_delete_old_export_files'.
# 1625731052.8918 : Parent-closed : 53135 : for event 'wp_privacy_delete_old_export_files'.
# 1625731052.8923 : Wait-begin : 53132 : Waiting 3 events to finish.
# 1625731052.8923 : Child-closed : 53133 : for event 'docketcache_gc'.
# 1625731052.8926 : Child-closed : 53134 : for event 'docketcache_watchproc'.
# 1625731052.8927 : Child-closed : 53135 : for event 'wp_privacy_delete_old_export_files'.
# 1625731052.8927 : Wait-done : 53132 : Processing next 3 events.
....
Run WordPress cron with 3 events execute in parallel using server cron. Edit /etc/crontab
and insert command below:
* * * * * apache /usr/local/bin/cronwp /path-to/wordpress -q -j 3 &>/dev/null
Replace apache with web server or php-fpm user to avoid issue with filesystem permission.
Please open an issue to report a bug or discuss what you would like to change.
Docket CronWP is part of the Docket Cache project.
Fund this project one-off or recurring payment to support open-source development efforts.
https://docketcache.com/sponsorship/
Docket CronWP is an Open Source Software under the MIT license.