I have WordPress Multisite with several sites. I set up DISABLE_WP_CRON
to true
in my wp-config.php
.
If we set up cron task with wget or curl we have 30 sec rule to execute PHP script. It’s so small to send tons of email notifications and do other stuff (maybe remote SMTP server connection is slow, maybe it’s really huge bunch of email notifications from bbPress or anything).
Maybe we can use something like this?
php -q wp-cron.php
But it’s only run cron to one site in Multisite (each site have their own cron tasks in different MySQL tables).
P. S. On wpmudev.org forum I found strange “solution” which also use Curl.
Another P. S. WP CLI have awesome wp cron
commands but it’s only allow run cron tasks manually (yep, we can use --url
attr). For example:
wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com
I think the best way is to use WP-CLI but you’d need to write a bash script to do this. Here is one that should do it for you:
WP_PATH="/path/to/wp"
for SITE_URL in = $(wp site list --fields=domain,path,archived,deleted --format=csv --path="$WP_PATH" | grep ",0,0$" | awk -F ',' '{print $1 $2}')
do
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}')
do
wp cron event run "$EVENT_HOOK" --url="$SITE_URL" --path="$WP_PATH"
done
done
You’d then need to add this script to crontab and run it maybe every minute if you like