Chạy WP Cron trên Multisite

Nếu đã sử dụng WP Rocket, chắc hẳn bạn đã được khuyến nghị vô hiệu hóa Cron mặc định của wp và chạy nó ở cấp sever.

Đối với website bình thường thì cứ làm theo hướng dẫn của plugin là được. Tuy nhiên, đối với wp multisite thì phải biến đổi một chút. Sau đây là phương pháp của tác giả Slavi Marinov, hoạt động trên WP-CLI. Tiến hành thôi nhỉ?

Vô hiệu hóa WP Cron mặc định

Mở wp-config.php thêm mã sau nếu chưa có

define('DISABLE_WP_CRON', true);

Cài đặt Multisite Cron

Tạo file multi_cron.php trong thư mục gốc với nội dung:

<?php
if (!isset($_REQUEST['go'])) {
    if (php_sapi_name() != "cli") {
        return;
    }
}

// We want to see all errors
error_reporting(E_ALL);
ini_set('display_errors', 1);
 
header( 'Content-type: text/plain; charset=utf-8' );
 
ignore_user_abort(true);
set_time_limit(30 * 60);
 
$php_cmd = 'php';
$php_cli_options = array(
    '/usr/local/bin/php',
    '/usr/bin/php',
);
 
foreach ($php_cli_options as $php_bin_opt) {
    if (@is_file($php_bin)) {
        $php_cmd = $php_bin_opt;
        break;
    }
}
 
$wp_cli_options = array(
    '/usr/local/bin/wp',
    '/usr/bin/wp',
    './wp-cli.phar',
);
 
$wp_cmd = $wp_cli_options[0];
 
foreach ($wp_cli_options as $wp_cli_option) {
    if (@is_file($wp_cli_option)) {
        $wp_cmd = $wp_cli_option;
        break;
    }
}
 
if (preg_match('#win#si', PHP_OS)) { // on windows we call wp directly
    $main_cmd = $wp_cmd;
} else {
    $main_cmd = "$php_cmd $wp_cmd";
}
 
$cmd = "$main_cmd site list --field=url --archived=0 --deleted=0 --skip-packages --skip-plugins --skip-themes --format=json";
$json_str = trim(`$cmd`);
 
$blogs = empty($json_str) ? array() : json_decode($json_str, true);
$blogs = empty($blogs) ? array() : $blogs;
$total = count($blogs);
 
echo "<pre>";
echo "Starting at " . date('r') . "\n";
 
foreach ($blogs as $idx => $url) {
    $cur = $idx + 1;
    echo "$cur of $total) Processing: [$url]\n";
    $url_esc = escapeshellarg($url);
    $cmd = "$main_cmd cron event run --due-now --url=$url_esc";
    $cmd_res = trim(`$cmd`);
    echo "cron: [$cmd_res]\n";
    echo "\n<br/>";
 
    // Output stuff every X few showers
    if ($idx % 5 == 0) {
        flush();
        ob_flush();
    }
}
 
echo "Finished at " . date('r') . "\n";
echo "</pre>";
 
exit(0);

Thiết lập Cron job trên server

ssh vào server và chạy lệnh:

crontab -e

Thêm vào

*/15 * * * * wget -q -O - https://domain.com/multi_cron.php?go &>/dev/null 2>&1

Lưu ý: thay domain.com bằng tên miền chính của mạng, 15 là số phút thực hiện cron – có thể đặt tùy bạn.

Để lưu lại, nhấn Ctrl + X, y và Enter. Đừng quên khởi động lại nginx nhé.

4 1 vote
Article Rating

Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Logo
Register New Account
Reset Password