ডাব্লুপি ক্রোনকে সঠিকভাবে মাল্টিসাইটে চালানো হচ্ছে


18

আমার বেশ কয়েকটি সাইট সহ ওয়ার্ডপ্রেস মাল্টিসাইট রয়েছে। আমি সেট আপ DISABLE_WP_CRONকরার জন্য trueআমার মধ্যে wp-config.php

যদি আমরা উইজেট বা কার্ল দিয়ে ক্রোন টাস্ক সেটআপ করি তবে পিএইচপি স্ক্রিপ্টটি কার্যকর করতে আমাদের 30 সেকেন্ডের নিয়ম রয়েছে। টন ইমেল বিজ্ঞপ্তি প্রেরণ এবং অন্যান্য স্টাফগুলি করা এত ছোট (সম্ভবত রিমোট এসএমটিপি সার্ভার সংযোগটি ধীর, সম্ভবত এটি বিবিপ্রেস বা যে কোনও কিছু থেকে ইমেল বিজ্ঞপ্তিগুলির বিশাল সংখ্যক)।

আমরা কি এরকম কিছু ব্যবহার করতে পারি?

php -q wp-cron.php

তবে এটি মাল্টিসাইটের একটি সাইটে ক্রোন চালায় (প্রতিটি সাইটের বিভিন্ন মাইএসকিউএল টেবিলগুলিতে নিজস্ব ক্রোন কাজ থাকে)।

PS অন ​​wpmudev.org ফোরামে আমি অদ্ভুত "সমাধান" পেয়েছি যা কার্ল ব্যবহার করে।

আরেকটি পিএস ডাব্লুপি সিএলআইয়ের দুর্দান্ত wp cronকমান্ড রয়েছে তবে এটি কেবল ক্রোন কার্যগুলিকে ম্যানুয়ালি অনুমতি দেয় (হ্যাঁ, আমরা --urlঅ্যাটর ব্যবহার করতে পারি )। উদাহরণ স্বরূপ:

wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com

আপনি কি WP-CLIকোর কোডটি একবার দেখেছেন?
কায়সার

হ্যাঁ. আমি এখনই উত্স কোডটি খনন করছি এবং বোঝার চেষ্টা করছি :) সমস্ত কার্য চালানোর আদেশ (ইভেন্টগুলি) বিদ্যমান নেই, সম্ভবত আমি ভবিষ্যতে এটি তৈরি করতে পারি।
কোল্যা কোরোবোচকিন

আপনার wp/ WP-CLI আপনার মধ্যে আছে PATH? যদি হ্যাঁ, ক্রোন চলমান একটি বাশ ফাইল থেকে কেন এটি ট্রিগার করবেন না?
কায়সার

শুনে ভালো লাগছে! তবে কীভাবে ডাব্লুপি ক্লাই থেকে সমস্ত ক্রোন কাজ চালানো যায়? আমি এর জন্য কোনও আদেশ দেখতে পাচ্ছি না।
কোল্যা কোরোবোচকিন

আপনার প্রশ্নের শেষে আপনি যেমনটি দেখিয়েছেন ঠিক তেমন?
কায়সার

উত্তর:


13

আমি মনে করি সবচেয়ে ভাল উপায় হ'ল ডাব্লুপি-সিএলআই ব্যবহার করা তবে এটি করার জন্য আপনাকে বাশ স্ক্রিপ্ট লিখতে হবে। আপনার জন্য এটি করা উচিত এমন এখানে একটি:

WP_PATH="/path/to/wp"
for SITE_URL in = $(wp site list --fields=domain,path,archived,deleted --format=csv --path="$WP_PATH" | grep ",0,0$" | awk -F ',' '{print $1 $2}')
do
    for EVENT_HOOK in $(wp cron event list --format=csv --fields=hook,next_run_relative --url="$SITE_URL" --path="$WP_PATH" | grep \"now\"$ | awk -F ',' '{print $1}')
    do
        wp cron event run "$EVENT_HOOK" --url="$SITE_URL" --path="$WP_PATH"
    done
done

তারপরে আপনাকে এই স্ক্রিপ্টটি ক্রোনট্যাবে যুক্ত করতে হবে এবং আপনি যদি চান তবে প্রতি মিনিটে এটি চালানো উচিত


এইচএম আপনার মতামতের জন্য আপনাকে ধন্যবাদ জানায় তবে আমি মনে করি এটি হ্যাকি (নোংরা) সমাধান। আমার মনে হয় ডাব্লুপিসিএলি-র জন্য কিছু পিএইচপি অ্যাডন লিখলে ভাল হবে যা কেবলমাত্র সমস্ত প্রয়োজনীয় কাজ চালায়। ডাব্লুপি ফাংশন এবং কোডটি করার জন্য আমার আরও সময় প্রয়োজন।
কোল্যা কোরোবচকিন

4
@ কল্যায়ে করবোচকিন ডাব্লুপি সিএলআই কমান্ড লাইনে এবং ব্যাশ স্ক্রিপ্টগুলিতে ব্যবহারের জন্য তৈরি করা হওয়ায় এটি মোটেও হ্যাকি নয়।
DiverseAndRemote.com 18

1
wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH- runডক্স অনুসারে , আপনার --due-nowপতাকাটি ব্যবহার করা উচিত । এটি চেহারা এবং পৃথক ইভেন্ট কলগুলি হ্রাস করবে। দেখুন: wp-cli.org/commands/cron/event/run । যেভাবেই হোক, আমি @ ওমারজ্যাকম্যানের সাথে রয়েছি - তিনি ওয়ার্ডপ্রেস কমান্ড লাইন সরঞ্জামগুলি ব্যবহার করতে কমান্ড লাইনটি ব্যবহার করছেন। একটি পরিষ্কার বাশ উদাহরণ জন্য প্রপস। আপনি ক্রন্টব এন্ট্রি দেখিয়ে এই উত্তরটি খুঁজে পেতে পারেন।
jgraup

: ভবিষ্যতের পাঠকদের সুবিধার জন্য, স্ক্রিপ্ট তারপর দেখে মনে হচ্ছেWP_PATH="/path/to/wp"; for SITE_URL in $(wp site list --fields=domain,path,archived,deleted --format=csv --path="$WP_PATH" | grep ",0,0$" | awk -F ',' '{print $1 $2}'); do wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH"; done
বিভ্রান্ত অবস্থা

10

আপনি ধ্রুবক যোগ করার পরে wp-config.php

defined('DISABLE_WP_CRON') or define('DISABLE_WP_CRON', true);

ডাব্লু-cli

এবং ধরে config.ymlনিচ্ছেন যে আপনার সেটআপটি সঠিকভাবে রয়েছে, --pathকল করার সময় আপনি পতাকাটি বাদ দিতে পারেন cron run


wp cron event run --due-now

[<hook>…] চালাতে এক বা একাধিক হুক।

[--due-now] এই মুহুর্তে সমস্ত হুক চালান।

[--all] সমস্ত হুক চালান।


করার সব কারণে ক্রন কর্ম চালানোর অনুক্রমে:

function run_crons_due_now_in_order { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL"; done; echo "Done"; }; run_crons_due_now_in_order;

আপনি যদি সেগুলি একই সাথে চালনা করতে চান (প্রথমে সাইট-নির্দিষ্ট নির্দিষ্ট ক্রোনটি চালাচ্ছেন):

function run_all_crons_due_now { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL" & done; wait $(jobs -p); echo "Done"; }; run_all_crons_due_now;

আপনি এক্সিকিউটেবল ফাইলে দুটি বিকল্প রাখতে চান to

chmod +x run_all_wp_cron_events_due_now.sh

একটি ক্রন্টব টাস্ক যুক্ত করুন

crontab -e

এবং সম্ভবত প্রতিটি মিনিট চালানো

* * * * * run_all_wp_cron_events_due_now.sh > /dev/null

আপনি যদি ক্রোন থেকে একটি কাস্টম কমান্ড চালাতে চান তবে আপনার ডাব্লুপি-ক্লিমে কাজ করার জন্য পুরো পথ নির্দিষ্ট করতে হবে ।

* * * * * cd /home/username/public_html; /usr/local/bin/php /home/username/wp-cli.phar your-custom-cron-commands run >/dev/null 2>&1

পিএইচপি

আপনার এখানে ওয়ার্ডপ্রেস লোড করার একমাত্র কারণ হ'ল প্রাক-সংজ্ঞায়িত তালিকাটি ব্যবহার না করে ডাটাবেস থেকে ইউআরএল সংগ্রহ করা। আমরা কেবল সেই ইউআরএলগুলিকেই পিং করতে যাচ্ছি এবং প্রতিক্রিয়া কী তা আমরা সত্যিই চিন্তা করি না।

custom-cron.php

<?php

// Load WP
require_once( dirname( __FILE__ ) . '/wp-load.php' );

// Check Version
global $wp_version;
$gt_4_6 = version_compare( $wp_version, '4.6.0', '>=' );

// Get Blogs
$args  = array( 'archived' => 0, 'deleted' => 0, 'public' => 1 );
$blogs = $gt_4_6 ? get_sites( $args ) : @wp_get_sites( $args ); // >= 4.6

// Run Cron on each blog
echo "Running Crons: " . PHP_EOL;
$agent = 'WordPress/' . $wp_version . '; ' . home_url();
$time  = time();

foreach ( $blogs as $blog ) {
    $domain  = $gt_4_6 ? $blog->domain : $blog['domain'];
    $path    = $gt_4_6 ? $blog->path : $blog['path'];
    $command = "http://" . $domain . ( $path ? $path : '/' ) . 'wp-cron.php?doing_wp_cron=' . $time . '&ver=' . $wp_version;

    $ch = curl_init( $command );
    $rc = curl_setopt( $ch, CURLOPT_RETURNTRANSFER, false );
    $rc = curl_exec( $ch );
    curl_close( $ch );

    print_r( $rc );
    print_r( "\t✔ " . $command . PHP_EOL );
}

এবং custom-cron.phpকোনও ক্রন্টবে আপনার একক কল যুক্ত করুন

* * * * * wget -q -O - http://your-site.com/custom-cron.php?doing_wp_cron

1

কম বাশ সহ সহজ ওয়ান-লাইনার:

wp site list --field=url | xargs -i -n1 wp cron event run --due-now --url="{}"

আপনি হয় এটি ম্যানুয়ালি চালাতে পারেন বা এটি কোনও স্ক্রিপ্টে রাখতে পারেন এবং অন্যান্য উত্তরগুলির মতো ক্রোন থেকে কল করতে পারেন।


0

এটি আমার সমাধান:

global $multisite_hosts;
$multisite_hosts = Array('xxxx.dev.xxx.oondeo.es','x2.dev.xxx.oondeo.es','x3.dev.xxx.oondeo.es');

function run_cron(){
  global $multisite_hosts;
  $host=array_pop($multisite_hosts);
  if (!$host)
    return;
  register_shutdown_function('shutdown');
  if (!isset($_SERVER['HTTP_HOST'])) {
       $_SERVER['HTTP_HOST'] = $host;  // replace with primary host
  }

  require './wp-cron.php';
}

function shutdown()
{
  run_cron();
}
run_cron();

আমরা ক্রোনটাব থেকে এটি কল, আশা করি এটি সাহায্য করবে


-5

আমি মনে করি আপনাকে প্রথমে এবং সর্বাগ্রে "ডাব্লুপি-ক্রোন.এফপি সঠিক পদ্ধতিতে চালানো" বলতে আপনার অর্থ কী আমাদের তা বলা উচিত। ওয়ার্ডপ্রেসের মতে, আপনি ডাব্লুপি-ক্রোন অক্ষম করেছেন এবং এখনও এটি চালানো চান তা বোঝার কোনও অর্থ নেই ... লিনাক্সের দৃষ্টিকোণ থেকে, উইজেট-ইনিং বা / বিন / পিএইচপি-আইং ডাব্লুপি-ক্রোন.পিপি সঠিক হবে, তবে দেখে মনে হচ্ছে আপনার নির্দিষ্ট হোস্ট সুরক্ষার কারণে আপনার পিএইচপি আহ্বানের সংখ্যা সীমাবদ্ধ করছে? - অংশটি আপনার বিবরণ থেকে সম্পূর্ণ পরিষ্কার নয়।

আরেকটি প্রশ্ন: "একটি টন" কতটি ইমেল? আপনি খুব বেশি ইমেলগুলি দ্রুত পাঠানোর চেষ্টা করবেন না এমন দুর্দান্ত কারণ রয়েছে।

আপনার উদ্দেশ্যগুলি পুনরায় চিন্তা করতে হতে পারে।

(আমি উত্তর দেওয়ার পরিবর্তে মন্তব্য করব তবে ডাব্লুপিস্ট্যাকের বিষয়ে আমার যথেষ্ট সুনাম নেই।)


3
ওয়ার্ডপ্রেস ক্রোন চালনার একাধিক উপায় রয়েছে। অন্তর্নির্মিত প্রক্রিয়াটি পৃষ্ঠা দর্শন দ্বারা ট্রিগার করা হয় এবং এর DISABLE_WP_CRONপরিবর্তে আরও নির্ভরযোগ্য সিস্টেম ক্রোন পদ্ধতি সেটআপ করার সময় এই পদ্ধতিটি অক্ষম করা সেট করা সাধারণ অভ্যাস ।
মার্কাস ডাউনিং

প্রশ্নটি কেন এটি করা উচিত নয় / যদি কারণগুলি অর্থবোধক হয় তবে কীভাবে সঠিকভাবে একটি মাল্টিসাইট ইনস্টলেশনতে wp-cron.php কল করতে হয়। আমার পক্ষে বেশ পরিষ্কার;)
ফিলিপ

1
আমি আশা করি আপনি বুঝতে পেরেছেন যে আপনি খুব পুরানো এবং ইতিমধ্যে লুকানো উত্তরের উপর মন্তব্য করছেন।
হোর্হে অর্পিনেল 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.