Php 无法在Cpanel上设置cron作业
正在尝试在Cpanel上添加cron作业以每5分钟运行一次。我将其添加到命令输入中(从url中删除了个人详细信息) 然后在Php 无法在Cpanel上设置cron作业,php,cron,cpanel,Php,Cron,Cpanel,正在尝试在Cpanel上添加cron作业以每5分钟运行一次。我将其添加到命令输入中(从url中删除了个人详细信息) 然后在functions.php上,我有以下内容: if (!empty($argv[1])) { switch ($argv[1]) { case "updateproducts": update_products(); break; } } 如果我使用管理页面上的按钮触发,update\u pr
functions.php
上,我有以下内容:
if (!empty($argv[1])) {
switch ($argv[1]) {
case "updateproducts":
update_products();
break;
}
}
如果我使用管理页面上的按钮触发,update\u products()
函数,则手动运行时不会出现任何错误。但是,无论我在cronjob选项卡上做什么,它都不会运行
有什么想法吗
function update_products() {
global $wpdb;
$groups = get_groups_from_cron_jobs(100);
foreach ( $groups as $group ) {
$name = $group->group_name;
$sql = $wpdb->prepare("SELECT * FROM {$wpdb->prefix}products WHERE name='%s'", $name);
$products = $wpdb->get_results($sql);
if ( !empty($products) ){
$post_id = get_post_id_from_products($products);
//if there isn't a parent_id then create a new product
if ( !$post_id && $name != '' ) {
$post_id = create_a_new_product($name);
}
// make sure that all products will have now a parent_id
add_parent_id_on_products($name, $post_id);
insert_product_attributes($post_id, $products);
insert_product_variations($post_id, $products);
delete_group_from_cron_jobs($name);
}
}
}
编辑:根据答案/评论,我做了额外的研究,发现我可以在任何脚本上加载$wpdb。我所做的是:
if (!empty($argv[1])) {
switch ($argv[1]) {
case "updateproducts":
$path = $_SERVER['DOCUMENT_ROOT'];
require( $path . '/staging/the_web_site/wp-load.php' );
update_products();
break;
}
}
但是,我仍然在电子邮件中看到错误:
Status: 500 Internal Server Error
X-Powered-By: PHP/5.6.31
Content-type: text/html; charset=UTF-8
恐怕有人误解了web环境和控制台环境的可操作性 简而言之,您的函数期望WordPress存在。它期望用户已通过WordPress应用程序访问该函数,并且存在全局变量,例如
$wpdb
(除其他外)。如果您通过管理页面访问此功能,则这一切都是正确的,并且此功能正常工作
但是如果您通过控制台(命令行)访问此函数,则所有这些都不是真的。WordPress在该请求的上下文中不存在global$wpdb
不存在,因为该函数不是通过WordPress访问的,而是通过直接命令访问的
如果希望此函数在命令行上工作,则需要重写它以在该环境中工作。这意味着根本没有WordPress特定的助手或功能
或者,您可以使用WordPress Cron
,它们不是真正的Cron作业,而是在访问站点时运行(在定义的时间范围内)。因此,如果您有一个必须每五分钟运行一次的cron,但是您不能每隔几分钟就有一个新的访问者,那么这些将不适合您的需要,但它们是一种选择
您确定它根本没有运行吗?你能检查你的服务器日志,看看cron作业是否产生了任何错误吗?我添加了一封电子邮件来接收输出,并删除了-quit模式。我得到一个
状态:500内部服务器错误
。这很奇怪,因为我可以手动运行它。你可以发布你的update\u产品
功能吗?@CGriffin Done。但是正如我所说的,如果我在表单上的点击事件上添加函数,它就会运行,并得到所需的结果。您需要得到一些更详细的错误。您是否可以访问实际的错误日志?仅500个错误是不够的。在Cpanel上,错误选项不显示任何相关信息,原始访问文件只显示500个错误,没有额外信息。您有权访问控制台吗?您是否可以手动运行该命令并查看其输出?您能否在函数中删除一些var\u转储
,看看这些输出是什么?您需要先确定错误是什么,然后才能修复它。我选择您的答案作为最佳答案。你帮我发现了问题并最终解决了它。这是一个走错路的问题。我在这里和那里添加了一些var_dump,发现了错误的路径。我很高兴您能够找到问题!
Status: 500 Internal Server Error
X-Powered-By: PHP/5.6.31
Content-type: text/html; charset=UTF-8