Невозможно настроить работу cron на Cpanel

Попытка добавить задание cron на Cpanel для запуска каждые 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

0

Решение

Я боюсь, что есть некоторое недопонимание о том, как здесь взаимодействуют веб-среда и консольная среда.

Короче говоря, ваша функция ожидает существования WordPress. Ожидается, что пользователь получил доступ к функции через приложение WordPress и что глобальные переменные, такие как $wpdb существуют (между прочим). Если вы получаете доступ к этой функции через страницу администратора, то это все верно, и функция работает.

Но если вы получаете доступ к этой функции через консоль (командную строку), все это не так. WordPress делает не существуют в контексте этого запроса. global $wpdb не существует, потому что функция не была доступна через WordPress, но через прямую команду.

Если вы хотите, чтобы эта функция работала в командной строке, вам нужно будет переписать ее для работы в этой среде. Что означает отсутствие специальных помощников или функций WordPress.

Кроме того, вы можете использовать WordPress Crons, которые не являются настоящими заданиями Cron, но выполняются при каждом доступе к сайту (в пределах их определенного временного диапазона). Так что если у вас есть хрон, должен запускайте каждые пять минут, но у вас не будет надежного нового посетителя каждые несколько минут, это не будет соответствовать вашим потребностям, но это вариант.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector