Php 无法在Cpanel上设置cron作业

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

正在尝试在Cpanel上添加cron作业以每5分钟运行一次。我将其添加到命令输入中(从url中删除了个人详细信息)

然后在
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