প্রতি 5 মিনিটে একটি ফাংশন কীভাবে চালানো যায়?


15

আমার প্রতি 5 মিনিটে একটি ফাংশন চালানো হবে। আমি কোডেক্স থেকে নিম্নলিখিতগুলি উল্লেখ করেছি:

<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?> 

আমি কখন শুরু করতে হবে তা নির্বিশেষে কেবল প্রতিটি 5 মিনিট এই ফাংশনটি চালাতে চাই। আমি এই কিভাবে করতে পারি?

এছাড়াও এটি কোডেক্স বলেছে যে সাইটটিতে কোনও দর্শনার্থী দেখার সময় ক্রোন চালানো হবে। ঠিক মিনিট প্রতি ক্রোন চালানোর এবং দেখার জন্য অপেক্ষা না করার কোনও উপায় আছে কি?

আসুন বলি যে নিম্নলিখিত ফাংশনটি প্রতি 5 মিনিটে চালানো উচিত তবে আমি কীভাবে এটি ব্যবহার করে wp_schedule_event()বা করতে পারি wp_cron?

function run_evry_five_minutes(){
    // codes go here
}

আপনি যেমন একটি সংক্ষিপ্ত বিরতি এবং যথার্থতা প্রয়োজন যেমন লিনাক্স ক্রোন বা তৃতীয় পক্ষের ক্রোন পরিষেবাগুলি আরও ভালভাবে দেখুন
বার্জায়ার

সাইট ভারী যানবাহনকে দমন করেছে .. সুতরাং সময়ের ব্যবধান বিবেচনা করার দরকার নেই .. এটি প্রতি 2 বা 3 মিনিটের জন্য ট্রিগার করা হবে তা নিশ্চিত .. ক্লায়েন্টরা এটি করতে পছন্দ করেfunctions.php
বোকা কোডার

টাইমার সহ সার্ভারে কিছু না চালিয়ে পিএইচপি ফাইল ট্রিগার করা সম্ভব নয়।
অ্যান্ড্রু ওয়েলচ

ফাইল? আমরা
বোকা কোডার

আপনি কি মনে করেন যে কোনও ফ্রি মনিটরিং পরিষেবা সিআরনকে ট্রিগার করে এমন পিং হতে পারে? newrelic.com/server-monনিস্ট্রেশন
jgraup

উত্তর:


28

আপনি ক্রোন_শেজুলসের মাধ্যমে নতুন সময়সূচির সময় তৈরি করতে পারেন:

function my_cron_schedules($schedules){
    if(!isset($schedules["5min"])){
        $schedules["5min"] = array(
            'interval' => 5*60,
            'display' => __('Once every 5 minutes'));
    }
    if(!isset($schedules["30min"])){
        $schedules["30min"] = array(
            'interval' => 30*60,
            'display' => __('Once every 30 minutes'));
    }
    return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');

এখন আপনি আপনার ফাংশন শিডিউল করতে পারেন:

wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);

এটি একবারে নির্ধারিত করার জন্য, এটি একটি ফাংশন এ মোড়ানো এবং এটি চালানোর আগে পরীক্ষা করুন:

$args = array(false);
function schedule_my_cron(){
    wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
}
if(!wp_next_scheduled('my_schedule_hook',$args)){
    add_action('init', 'schedule_my_cron');
}

$ আরগ্স প্যারামিটারটি নোট করুন! Wp_next_schedised এ। আরোগুলি প্যারামিটার উল্লেখ না করে, তবে wp_schedule_event এর জন্য gs আরোগুলি থাকার কারণে একই ইভেন্টের প্রায় অসীম সংখ্যার নির্ধারিত হবে (কেবল একটির পরিবর্তে)।

অবশেষে, আসল ফাংশনটি তৈরি করুন যা আপনি চালাতে চান:

function my_schedule_hook(){
    // codes go here
}

আমি মনে করি এটি উল্লেখ করা জরুরী যে ডাব্লুপি-ক্রোন প্রতিবার একটি পৃষ্ঠা লোড হওয়ার পরে সময়সূচীটি পরীক্ষা করে এবং নির্ধারিত কাজগুলি চালাচ্ছে।

সুতরাং, আপনার যদি কম ট্রাফিক ওয়েবসাইট থাকে যা কেবলমাত্র এক ঘন্টা 1 জন দর্শক রাখে, ডাব্লুপি-ক্রোন কেবল তখনই চলবে যখন সেই দর্শক আপনার সাইটটি ব্রাউজ করবে (এক ঘন্টার মধ্যে একবার)। আপনার যদি প্রতি সেকেন্ডে কোনও পৃষ্ঠার জন্য অনুরোধকারী দর্শকদের সাথে একটি উচ্চ ট্রাফিক সাইট থাকে তবে ডাব্লুপি-ক্রোনটি প্রতিটি সেকেন্ডে সার্ভারে অতিরিক্ত বোঝার কারণ হ'ল।

সমাধানটি হ'ল ডাব্লুপি-ক্রোনকে নিষ্ক্রিয় করা এবং সময়সীমার মধ্যে আপনার দ্রুত সময়ের সাথে নির্ধারিত ডাব্লুপি-ক্রোন কাজের (আপনার ক্ষেত্রে 5 মিনিট) পুনরাবৃত্তি করার সময় সময়ের মধ্যে একটি আসল ক্রোন কাজের মাধ্যমে এটিকে ট্রিগার করা।

লুকাস রল্ফ সমস্যাটি ব্যাখ্যা করে সমাধানটি বিস্তারিতভাবে দেন।

বিকল্প হিসাবে, আপনি প্রতি 5 মিনিটে আপনার সাইটের অনুসন্ধানের জন্য আপটাইমবোটের মতো একটি ফ্রি তৃতীয় পক্ষের পরিষেবাটি ব্যবহার করতে পারেন (এবং ডাব্লুপি-ক্রোনটি ট্রিগার করুন), যদি আপনি ডাব্লুপি -ক্রোন নিষ্ক্রিয় করতে না চান এবং সত্যিকারের ক্রোন কাজের মাধ্যমে এটিকে ট্রিগার করতে পারেন।


2

যদি আপনার সাইটটি ভারী ট্র্যাফিক পায় তবে আপনি set_transient()প্রতি 5 মিনিটে এটি চালানোর চেষ্টা করতে পারেন (খুব প্রায়), উদাহরণস্বরূপ:

function run_every_five_minutes() {
    // Could probably do with some logic here to stop it running if just after running.
    // codes go here
}

if ( ! get_transient( 'every_5_minutes' ) ) {
    set_transient( 'every_5_minutes', true, 5 * MINUTE_IN_SECONDS );
    run_every_five_minutes();

    // It's better use a hook to call a function in the plugin/theme
    //add_action( 'init', 'run_every_five_minutes' );
}

আচ্ছা, এর, হ্যাঁ! ... ...
10-10

হাঁ।, এটি কাজ না করে .. আমি করেছি কোড নিম্নলিখিত ব্যবহার functions.phpযখন পৃষ্ঠায় একটি দর্শন করতে, একটি আপডেট আমার ডাটাবেসের মধ্যে একটি টেবিল করা হবে .. function run_evry_five_minutes() { $homepage = file_get_contents('link to visit'); echo $homepage; }। তবে ডিবি টেবিলটি 6 মিনিটের পরেও আপডেট হয় না।
বোকা কোডার

কেন এটি আপনার পক্ষে কাজ করছে না জানি না তবে ক্রোন স্টাফ ব্যবহার না করে get_transient()/ কেবল এটি সম্পর্কে চিন্তা করা set_transient()অনেক বেশি
অর্থবোধ করে

wp_schedule_event () এর জন্য @ ব্রোঞ্জার এই ভাল বিকল্প?
মার্কো কুনিক

@ মার্কোকুনিć সত্যবাদী হতে জানেন না, চেষ্টা করে দেখেন নি ... এটি কেবলমাত্র কাজের প্রস্তাব হিসাবে দেওয়া হয়েছিল তবে আপনি যদি চেষ্টা করে দেখেন তবে আমাদের জানান ...! (জোহানো ফিয়েরার উত্তরটি ভাল ওয়ার্ডপ্রেস দেখাচ্ছে
st স্ট্যাককেক্সচেঞ্জ / এ

2

আপনি প্রতিটি প্লাগইন কলের পরিবর্তে প্লাগইন অ্যাক্টিভেশনে এটি ট্রিগার করতে পারেন:

//Add a utility function to handle logs more nicely.
if ( ! function_exists('write_log')) {
    function write_log ( $log )  {
        if ( is_array( $log ) || is_object( $log ) ) {
            error_log( print_r( $log, true ) );
        } else {
            error_log( $log );
        }
    }
}

/**
 * Do not let plugin be accessed directly
 **/
if ( ! defined( 'ABSPATH' ) ) {
    write_log( "Plugin should not be accessed directly!" );
    exit; // Exit if accessed directly
}

/**
 * -----------------------------------------------------------------------------------------------------------
 * Do not forget to trigger a system call to wp-cron page at least each 30mn.
 * Otherwise we cannot be sure that trigger will be called.
 * -----------------------------------------------------------------------------------------------------------
 * Linux command:
 * crontab -e
 * 30 * * * * wget http://<url>/wp-cron.php
 */

/**
 * Add a custom schedule to wp.
 * @param $schedules array The  existing schedules
 *
 * @return mixed The existing + new schedules.
 */
function woocsp_schedules( $schedules ) {
    write_log("Creating custom schedule.");
    if ( ! isset( $schedules["10s"] ) ) {
        $schedules["10s"] = array(
            'interval' => 10,
            'display'  => __( 'Once every 10 seconds' )
        );
    }

    write_log("Custom schedule created.");
    return $schedules;
}

//Add cron schedules filter with upper defined schedule.
add_filter( 'cron_schedules', 'woocsp_schedules' );

//Custom function to be called on schedule triggered.
function scheduleTriggered() {
    write_log( "Scheduler triggered!" );
}
add_action( 'woocsp_cron_delivery', 'scheduleTriggered' );

// Register an activation hook to perform operation only on plugin activation
register_activation_hook(__FILE__, 'woocsp_activation');
function woocsp_activation() {
    write_log("Plugin activating.");

    //Trigger our method on our custom schedule event.
    if ( ! wp_get_schedule( 'woocsp_cron_delivery' ) ) {
        wp_schedule_event( time(), '10s', 'woocsp_cron_delivery' );
    }

    write_log("Plugin activated.");
}

// Deactivate scheduled events on plugin deactivation.
register_deactivation_hook(__FILE__, 'woocsp_deactivation');
function woocsp_deactivation() {
    write_log("Plugin deactivating.");

    //Remove our scheduled hook.
    wp_clear_scheduled_hook('woocsp_cron_delivery');

    write_log("Plugin deactivated.");
}

1

আমি ভীত যে কোনও ফাংশনটি চালিত আপনার সাইটে দেখার জন্য অপেক্ষা করা ছাড়া অন্য একমাত্র বিকল্প হ'ল এই সার্ভারে ক্রোন জব সেটআপ করা এই জাতীয় /programming/878600/how টু-ক্রিয়েট-ক্রোনজব-ইউজিং-ব্যাশ বা আপনার সার্ভারে যদি আপনার সিপিএনেল স্টাইল ইন্টারফেস থাকে তবে কখনও কখনও এটি সেট আপ করার জন্য একটি গুই থাকে।


হ্যাঁ,।, আমি বুঝতে পেরেছি .. আমি ইতিমধ্যে সিপিএনএল থেকে কিছু ক্রোন তৈরি করেছি .. তবে এখন আমি একটি ফাংশন চালানোর চেষ্টা করছি functions.phpকারণ যখন ফাংশনটি একটিতে থাকে pluginবা functions.phpআমরা ক্লায়েন্টকে সিপ্যানেল থেকে ক্রোন স্থাপন করতে পারি না তাদের নিজস্ব ..
বোকা কোডার

1

Cronjob নির্ধারণকারী প্লাগইন, আপনি আপনার সাইট ভিজিট করার জন্য থাকার যে কেউ ছাড়া নির্ভরযোগ্যভাবে এবং সময়মত ঘন কর্ম চালাতে সক্ষম আপনার প্রয়োজন অন্তত 1 কর্ম এবং ইউনিক্স নিম্নলিখিতরূপে crontab পরিবর্তন সময়সূচী।

এটি ব্যবহার করা খুব সহজ এবং খুব নমনীয়। আপনি নিজের ফাংশনটি তৈরি করেন এবং এর মধ্যে একটি ক্রিয়া সংজ্ঞায়িত করেন। তারপরে আপনি প্লাগইন মেনু থেকে আপনার ক্রিয়াটি চয়ন করতে পারেন এবং যখনই আপনি চান ফায়ার করতে পারেন।


0

শিডিউল ফাংশন এবং একটি পুনরাবৃত্ত WP Ajax ফাংশন ব্যবহার করে আমার একটি সম্ভাব্য সমাধান রয়েছে।

  1. একটি ফাংশনটি চালানোর জন্য 60 মিনিটের একটি শিডিয়ুল ইভেন্ট তৈরি করুন
  2. এই ফাংশনটি আজাক্স ব্যবহার করে একটি পুনরাবৃত্ত ফাংশন ট্রিগার করবে file_get_contents()
  3. এজাজ ফাংশনটির মোট সংখ্যা 60 (এক ঘন্টার মধ্যে প্রতিটি মিনিটের জন্য) সহ ডাটাবেসে একটি পাল্টা থাকবে।
  4. এই এজাক্স ফাংশনটি আপনার কাউন্টারটিকে এখানে পরীক্ষা করে দেখবে:

যদি কাউন্টার সমান বা 60 এর বেশি হয় তবে এটি কাউন্টারটি পুনরায় সেট করবে এবং পরবর্তী ক্রোন কাজের জন্য অপেক্ষা করবে।

যদি 5 এর একাধিক কাউন্টার হয় (তাই প্রতি 5 মিনিটে) এটি আপনার পছন্দসই ফাংশনটি কার্যকর করবে

এবং, শর্তগুলি ছাড়াও, এটি 59 সেকেন্ডের জন্য ঘুমাবে sleep(59);(এটি মনে করে আপনার কাজটি এটি দ্রুত one ঘুমের পরে, এটি file_get_contents()আবার ব্যবহার করে ট্রিগার করবে ।

গুরুত্বপূর্ণ বিষয়গুলি লক্ষ্য করুন:

  1. প্রক্রিয়াটি বাধা দেওয়ার জন্য একটি উপায় তৈরি করুন (যেমন ডিবিতে একটি মান পরীক্ষা করা)
  2. একই সাথে 2 টি প্রক্রিয়া প্রতিরোধের জন্য একটি উপায় তৈরি করুন
  3. File_get_contents এ হেডারে সময় সীমাটি 2 বা 3 সেকেন্ডে সেট করে, অন্যথায় সার্ভারে বিভিন্ন প্রক্রিয়া কিছুই না হওয়ার অপেক্ষায় থাকতে পারে
  4. আপনি set_time_limit(90);ঘুমের আগে আপনার ফাংশনটি ভেঙে দিতে সার্ভার প্রতিরোধের চেষ্টা করতে ব্যবহার করতে পারেন

এটি একটি সমাধান, ভাল নয় এবং এটি সার্ভার দ্বারা অবরুদ্ধ হতে পারে। বাহ্যিক ক্রোন ব্যবহার করে আপনি একটি সাধারণ ফাংশন সেট করতে পারেন এবং সার্ভারটি প্রতি 5 মিনিটে একবার এটিতে সংস্থান ব্যবহার করবে। এই সমাধানটি ব্যবহার করে সার্ভার সর্বদা এটিতে সংস্থান ব্যবহার করবে।


0

@ জোহানোর উত্তর সঠিকভাবে ব্যাখ্যা করে যে কীভাবে ডাব্লুপি ক্রোন কাজের জন্য একটি কাস্টম ব্যবধান সেট করা যায়। দ্বিতীয় প্রশ্নের উত্তর যদিও দেওয়া হয়নি, যা প্রতি মিনিটে ক্রোন চালানো যায়:

  1. ফাইলটিতে wp-config.php, নিম্নলিখিত কোড যুক্ত করুন:

    define('DISABLE_WP_CRON', true);
  2. ক্রোন জব যুক্ত করুন ( crontab -eইউনিক্স / লিনাক্সে):

    1 * * * * wget -q -O - http://example.com/wp-cron.php?doing_wp_cron

প্রথম অংশ (পদক্ষেপ 1) ওয়ার্ডপ্রেস অভ্যন্তরীণ ক্রোন কাজ অক্ষম করবে। দ্বিতীয় অংশ (দ্বিতীয় ধাপ) প্রতি মিনিটে ম্যানুয়ালি ওয়ার্ডপ্রেস ক্রোন জব চালাবে।

@ জোহানোর উত্তর (কীভাবে প্রতি 5 মিনিটে একটি টাস্ক চালানো যায়) এবং আমার (কীভাবে ম্যানুয়ালি ক্রোনটি চালানো যায়) দিয়ে আপনার লক্ষ্য অর্জনে সক্ষম হওয়া উচিত।

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