配置 WordPress MultiSite 的 CronJob

使用 Linux 系统自带的计划任务定时触发 WordPress 可以让计划任务的触发时机变得可控,在一定程度上会减少访客的浏览行为触发 wp cron 造成的性能问题。

前段时间在配置一个 WordPress MultiSite (WordPress Mu)站群,一般情况下 WordPress 的计划任务是由用户的访问行为触发的,如果网站流量比较少(或者没有任何流量),那么定时任务就可能很难被触发(或者根本不会被触发)。为了解决这个问题,就要用到 Linux 系统自带的计划任务(Cron Job)。

安装 WP-Cli

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

关闭 WordPress 默认的计划任务

在 wp-config.php 中加入:

define( 'DISABLE_WP_CRON', true );

新增一个 Shell 脚本

/usr/local/bin/mucron.sh:

#!/bin/bash

# Fill Your WordPress PATH
WP_PATH="/path/to/wp"

# Check if WP-CLI is available
if ! hash wp 2>/dev/null; then
echo "WP-CLI is not available"
exit
fi

# 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}"
exit
fi

# Get a list of site URLs
if $(wp core is-installed --path="$WP_PATH" --quiet --network);
then
SITE_URLS=`wp site list --fields=url --archived=0 --deleted=0 --format=csv --path="$WP_PATH" | sed 1d`
else
SITE_URLS=(`wp option get siteurl --path="$WP_PATH"`)
fi

# Loop through all the sites
for SITE_URL in $SITE_URLS
do

# 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}')
do
wp cron event run "$EVENT_HOOK" --url="$SITE_URL" --path="$WP_PATH" --quiet

done
done

给予可执行权限:

chmod +x /usr/local/bin/mucron.sh

用 Crontab 设置计划任务

crontab -e

并且加入:

*/30 * * * * su -s /bin/bash -c '/usr/local/bin/mucron.sh' www

在 ~/.profile 中加入:

export HTTP_HOST='localhost'

执行:

source ~/.profile

重启 cron 服务

/etc/init.d/cron restart

尝试运行脚本:

su -s /bin/bash -c '/usr/local/bin/mucron.sh' www

如果没有错误提醒,那么就算成功了。

原创文章,作者:莫凡,如若转载,请注明出处:https://mihang.org/158.html

(0)
上一篇 2022年1月20日 下午5:13
下一篇 2022年2月2日 下午9:15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据