Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Run all due cron events for WordPress with WP-CLI. Works with both single sites and multisite networks.
# Copyright © 2015 Bjørn Johansen
# This work is free. You can redistribute it and/or modify it under the
# terms of the Do What The Fuck You Want To Public License, Version 2,
# as published by Sam Hocevar. See for more details.
# Check if WP-CLI is available
if ! hash wp 2>/dev/null; then
echo "WP-CLI is not available"
# If WordPress isn’t installed here, we bail
if ! $(wp core is-installed --path="$WP_PATH" --quiet); then
echo "WordPress is not installed here: ${WP_PATH}"
# Get a list of site URLs
if $(wp core is-installed --path="$WP_PATH" --quiet --network);
SITE_URLS=`wp site list --fields=url --archived=0 --deleted=0 --format=csv --path="$WP_PATH" | sed 1d`
SITE_URLS=(`wp option get siteurl --path="$WP_PATH"`)
# Loop through all the sites
# Run all event hooks that are due
for EVENT_HOOK in $(wp cron event list --format=csv --fields=hook,next_run_relative --url="$SITE_URL" --path="$WP_PATH" | grep now$ | awk -F ',' '{print $1}')
wp cron event run "$EVENT_HOOK" --url="$SITE_URL" --path="$WP_PATH" --quiet

This comment has been minimized.

Copy link

commented Mar 14, 2016

Hi @bjornjohansen,
I had an issue with the script and i can't figue it out whats the problem. the cron keep giving me "WP-CLI is not available" in my log, so i replace the wp with the absolute path /usr/local/bin/wp and still get the same error so i replace it again with phar://wp-cli.phar the error message gone but a new error start displaying WordPress is not installed here path/to/my/wp ???!!!!

Ubuntu OS 14.04
WP-CLI 0.22.0


This comment has been minimized.

Copy link

commented May 29, 2016

@sidati Try my fork code:
PS: Make sure you change your php and wp-cli path in the top lines.

@bjornjohansen Nice script, thank you !


This comment has been minimized.

Copy link

commented Nov 7, 2016

Hi !

Thank you for your script. But I have nearly the same problems as @sidati:

  • First wp-cli doesn't want to be run as root user for security reasons. So I run it with this command for example:
    sudo -u webuser wp --info
    It may be usefull to add a USER variable to launch wp-cli as this user.

  • Second, I also have this "WordPress is not installed here: /path/to/wordpress" despite the fact that I wrote the correct path in the script. We're agree that the PATH is the directory where wordpress is installed and where we can locate wp-config.php and others critical files, right ?

Thank you for your great job ;)

Edit: yes, correcting the user running wp makes no error code displaying (and no more Wordpress is not installed here).
I can't switch to the webuser as the user is not created on the server so command
su webuser
is not working. I can't edit crontab for this user too as I can't switch to it.
So I simply add the command 'sudo -u webuser' before any 'wp' command in your script and everything is going the right way :)


This comment has been minimized.

Copy link

commented Nov 7, 2017

It would seem that instead of looping through all the jobs and running them even if they weren't due (which this does if i understand correctly), you could just run:

wp cron event run --due-now

Like answered here:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.