如何解决WordPress主机导致的WP-Cron定时作业错误?

文章目录
  1. 什么是WP-Cron作业以及为什么失败:
  2. WP-Cron错误会导致哪些问题?
  3. 如何解决WordPress主机导致的WP-Cron任务错误?
    1. 1. 如何禁用wp-cron.php?
    2. 2. 设置你的手动Cron作业
  4. 修复SEO问题
  5. “太长不看”版 WP Cron修复总结
https://www.thewayoftheweb.net/solve-wp-cron-job-errors-caused-by-wordpress-hosting/
原文作者:Dan Thornton

想知道如何解决WordPress主机导致的WP Cron Job错误吗?其实发现和修复比您想象的要容易。只需5分钟就可以解决这个问题,对您的WordPress网站的性能、可用性和搜索引擎优化都有很大的影响。 您是否需要更改您的wp-cron.php设置将取决于您的服务器/主机。有些服务器提供商会因为资源占用和合理的安全考虑而禁止它运行。

什么是WP-Cron作业以及为什么失败:

WordPress使用了一个名为wp-cron.php的文件来安排自动任务。例如检查更新、发送电子邮件和备份网站等自动化任务。它是一个虚拟的cron作业,每当要执行预定任务时就会触发该作业,比如您有几篇需要定时发布的文章,或者是您设置了定期备份网站。

因此,当有人访问您的WordPress网站上的任何页面时wp-cron.php文件就会启动并检查是否需要执行预定的任务。

在许多WordPress主机上,这将按照预期运行。但是有些服务器会禁止这个功能的运行,因为大量访客会多次触发虚拟cron作业占用服务器上的资源。这也是一个潜在的安全漏洞。

WP-Cron错误会导致哪些问题?

wp-cron.php不能正常工作可能会导致两个问题。

第一个是依赖cron作业的插件和功能可能无法正常工作,或者产生错误。这不仅包括像定时发布文章,还包括很多插件功能的任务,如自动备份、自动生成的电子邮件等。

另一个问题可能更糟糕,因为你可能直到你去看了才发现它。因为没有成功运行cron作业,您的文章URL的后面可能会缀上“?doing_wp_cron”,基本上你创建的每一篇WordPress文章都至少会有两个版本。

这显然对SEO有很大的影响,因为搜索引擎绝对不喜欢大规模重复的内容。更令人恼火的是,它导致的重定向和规范化将指向重复的版本,而不是原始版本。所以你一般会发现你的网页会被搜索引擎列表驳回,而且你会在谷歌搜索控制台或必应网站管理员工具中列出大量的404和软404错误。

本质上,这让你的合法网站看起来像是在努力向搜索引擎发送垃圾信息。以及有可能导致人们链接到你的重复版本,最大限度地减少了获得外链的好处。

所以基本上,这不是什么好事。幸运的是,修复方法是相对快速和轻松的。

如何解决WordPress主机导致的WP-Cron任务错误?

“太长不看”版请点击这里。

要解决这个问题,你只需要遵循3个简单的步骤。

  1. 禁用wp-cron.php。
  2. 设置一个手动的cron作业,按照设定的时间表运行。如果你在一台服务器上运行多个网站,那么就错开时间,以避免一次触发所有操作。
  3. 重定向不正确的URL,使它们指向真正的文章地址,并避免混淆搜索引擎。

1. 如何禁用wp-cron.php?

因此,首先我们需要阻止那个讨厌的wp-cron.php造成更多的问题。

你可以通过你的主机的“服务器控制面板(如cpanel等)”来直接访问WordPress中的文件,尽管我更喜欢使用FTP客户端来登录服务器。在大多数主机上,你需要先登录服务器控制面板,创建一个网站的FTP账户,然后再使用你喜欢的FTP软件登陆网站。就我个人而言,我已经使用Filezilla多年,没有任何问题,因为它是免费的、开源的,而且经常更新。

当你连接到你的网站后,你一般会看到Public_html或wwwroot或htdocs文件夹。打开它,里面就是你的WordPress网站文件。在列表中你应该能找到你的wp.config.php文件。这个文件控制着你网站的数据库信息等功能,包括cron作业。

按右键,选择“查看/编辑”。

在你做任何事情之前,先在记事本或类似的文件中保存一份,以防万一出错。如果您忘记了,您需要找到WordPress.org上列出的例子或者重新安装WordPress。

您应该会看到一些与您的特定安装相关的文本,然后。

/** 创建数据表时默认的文字编码 */

define('DB_CHARSET', 'utf8mb4');

/** 数据库整理类型。如不确定请勿更改 */

define('DB_COLLATE', '');

在这段文字的下面,添加下面一行。

define('DISABLE_WP_CRON', true);

你可能会看到一些建议使用define( 'ALTERNATE_WP_CRON', true ); 作为一个解决方案,但WordPress.org描述它“有点不确定”,我从来没有发现它好使过。而替换禁用版本的额外时间只多了几分钟……

2. 设置你的手动Cron作业

接下来,你需要手动设置一个cron作业。这一步根据您的服务器管理面板的不同而不同。宝塔、cPanel等面板都有类似“定时任务”的功能。

要运行的脚本是:

wget -q -O - (你的网站域名)/wp-cron.php?doing_wp_cron >/dev/null 2>&1

唯一需要设置的是cron作业运行的频率。一般来说,对于一个低流量的网站,你可以每6个小时运行一次,如果你有一个更受欢迎的网站,则每1小时运行一次。无论哪种方式,它都能真正发挥作用,如果你的托管公司提醒你服务器使用量较高,你可以调整频率(或者您可以检查服务器日志以抢先任何警告……)。

所以,现在我们解决了cron作业的问题。

但实际上还有一个大问题。我们仍然有成千上万的重复页面四处漂浮,搜索引擎在搜索结果中寻找正确的页面时也会感到困惑。

修复SEO问题

因此,为了给用户和搜索引擎提供正确的URL,我们需要引导他们到正确的页面。

我们可以通过分别重定向每个错误来手动执行此操作。例如,您可以使用“Redirection”之类的插件,并浏览Google Analytics(分析)中列出的所有内容(或至少获得合理流量的任何内容)。

但这并不是利用时间的最佳方式,还有更好的方式。

再次启动你的FTP客户端,这次你要在网站文件夹中寻找.htaccess文件。

当你选择“查看/编辑”的时候,你应该会看到这样的内容。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

我们需要做的就是为wp_doing_cron添加一个重写条件。我不是创建重写条件的专家,所以要感谢来自https://whitemousedigital.com 的 Rob Hughes 的帮助...... 您只需要添加:

RewriteCond %{QUERY_STRING} (^|&)doing_wp_cron=[0-9]+.[0-9]+(&|$) [NC]
RewriteRule ^ %{REQUEST_URI}? [R=301,L]

例如:

DirectoryIndex index.php
#Rewrite Wp Cron Errors
RewriteCond %{QUERY_STRING} (^|&)doing_wp_cron=[0-9]+.[0-9]+(&|$) [NC]
RewriteRule ^ %{REQUEST_URI}? [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

#表示注释,而不是任何条件的一部分。所以#Rewrite Wp Cron Errors是一个很有用的提醒,提醒你添加这一点是为了做什么。

现在,当您使用?wp_doing_cron访问一个旧url时,它应该自动将您重定向到正确的url。

这不仅意味着,你的用户现在将结束在正确的地方,他们应该访问旧的重复的网址。它也清楚地表明,每一个搜索引擎哪一个是正确的网址,哪个是他们应该忽略的垃圾。通过使用301重定向,如果有人已经在自己的文章中链接到重复的网址,也会将该链接传递到正确的位置,而不是全部丢失。

好了,那么这个快速简单的解决方案现在已经有了约3000多字。那么下面就是“太长不看”版了。

“太长不看”版 WP Cron修复总结

  • 在你的wp.config.php中添加define('DISABLE_WP_CRON', 'true');,关闭任何现有的wp-cron任务。
  • 通过你的主机的管理面板,设置一个手动的cron任务。要运行的脚本是:
    wget -q -O - (你的网站域名)/wp-cron.php?doing_wp_cron >/dev/null 2>&1
    频率在每1到6小时运行一次为佳。
  • 将所有重复的垃圾URL重新定向到正确的URL中,通过添加
    RewriteCond %{QUERY_STRING} (^|&)doing_wp_cron=[0-9]+.[0-9]+(&|$) [NC] 
    RewriteRule ^ %{REQUEST_URI}? [R=301,L]
    到你的.htaccess文件中。
  • 使用其中一个旧的重复的"?wp_doing_cron "URL来检查它现在是否正确重定向。
  • 你现在成功解决了WordPress主机引起的WP-Cron作业错误了,感到很得意

This article is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Based on a work at www.thewayoftheweb.net.