簡體   English   中英

無法在Cpanel上設置Cron作業

[英]Cannot setup a cron job on Cpanel

嘗試在Cpanel上添加cron作業以每5分鍾運行一次。 我將此添加到命令輸入中(從url中刪除了個人詳細信息)

/usr/bin/php -q /home/my_name/public_html/staging/the_web_site/wp-content/themes/my_child_theme/functions.php updateproducts

然后在functions.php ,我有這個:

if (!empty($argv[1])) {
    switch ($argv[1]) {
        case "updateproducts":
            update_products(); 
            break;
    }
}

如果我通過管理頁面上的按鈕觸發了update_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 Crons ,這不是真正的Cron作業,而是在訪問網站時(在其定義的時間范圍內)運行。 因此,如果您有一個必須每五分鍾運行一次的cron,但是您不會每隔幾分鍾可靠地擁有一個新訪客,則這些將不滿足您的需求,但是可以選擇。

http://www.wpbeginner.com/plugins/how-to-view-and-control-wordpress-cron-jobs/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM