चेक करें कि क्या फ़ंक्शन क्रोन जॉब द्वारा बुलाया गया है


13

मेरे पास एक फ़ंक्शन है जिसे मैं केवल क्रॉन जॉब के माध्यम से चलाना चाहता हूं। क्या कोई ऐसा तरीका है जो मैं जांच सकता हूं कि एक विशेष अनुसूचित घटना इस फ़ंक्शन को बुला रही है और कुछ नहीं?


3
Btw: यदि इनाम नहीं दिया जाता है तो आप वापस नहीं मिलते हैं। जैसा कि आप पहले ही एक उत्तर को समाधान के रूप में चिह्नित कर चुके हैं, कृपया उपयोगकर्ता को इनाम भी दें। धन्यवाद।
केसर

जवाबों:


18

वर्डप्रेस में एक स्थिरांक है DOING_CRONजो हमें यह जानने में मदद करता है कि हम क्रोन जॉब्स कर रहे हैं या नहीं। यह wp-cron.phpफ़ाइल में परिभाषित है ।

तो, आप अपने कोड में इस स्थिरांक की जांच कर सकते हैं:

if ( defined( 'DOING_CRON' ) )
{
    // Do something
}

2
WordPress के रूप में 4.8.0 के wp_doing_cron()बजाय इस्तेमाल किया जा सकता है।
जो

2

बस "क्रोन एपीआई इंस्पेक्टर" पर एक नज़र डालें , जो मैंने प्रश्न # 18017 के लिए लिखा था । प्लगइन एक तालिका बनाता है shutdownजो पृष्ठ के -hook / समाप्ति पर दिखाता है ।

यह _get_cron_array()सभी पंजीकृत और अनुसूचित क्रियाओं को पुनः प्राप्त करने के लिए फ़ंक्शन का उपयोग करता है । एक और उपयोगी कार्य है wp_get_schedules()। तीसरा तरीका अंतर्निहित डेटा को _get_cron_array()सीधे कॉल करके कह रहा है get_option( 'cron' );- WP कोर से डिफ़ॉल्ट एपीआई फ़ंक्शन का उपयोग करना अभी भी बेहतर है।

यदि आप जानना चाहते हैं कि क्या आप वर्तमान में क्रोन जॉब के अंदर हैं, तो आप जांच कर सकते हैं defined( 'DOING_CRON' ) AND DOING_CRON


1

मैं विकास का अध्ययन नहीं कर रहा हूँ (मैं सिर्फ एक उत्साही हूँ) लेकिन मुझे लगता है कि आप इस घटना में एक add_action जोड़ सकते हैं

यह सिर्फ एक फिर से शुरू है ...

//to the event
if(your_condition)
{
    add_action('original_event_to_hook', 'your_scheduled');
}

function your_scheduled()
{
    //create a param here
    //And shedule your function with arg
    wp_schedule_event(time(), 'hourly', 'your_function', array('param_1' => value));
}

function your_function($args){

   $verification = $args['param_1'];
   if($verification)
   {
      //OK
      //Eventually delete this schedule with this specific arg
   }
}

अपने क्रोन "your_function" की सूची प्राप्त करने के लिए जहां यह arg है

     //Get a filtered list of cron hooks 
        function kw_filter_crons_hooks($hooks = false, $args = false)
        {
            $crons = get_option('cron');

            if (!$crons)
            {
                $crons[0] = NULL;
            }

            $filter = array();
            $cronlist = array();
            $schedule = array();

            foreach($crons as $timestamp => $cron)
            {
                //@param $hooks = string 'schedule'
                //@param $args = false
                //Return an array of cron task sheduled
                $schedule[] = $cron;

                if(!$schedule && $hooks == 'schedule' && $args == false)
                {
                    $schedule[0] = NULL;
                }

                foreach($hooks as $hook)
                {
                    if(isset($cron[$hook]))
                    {
                        //@param $hooks = array($hook);
                        //@param $args = false
                        //Return an array of cron task sheduled
                        $cronlist[] = $cron;

                        if(!$cronlist && is_array($hooks) && $args == false)
                        {
                            $cronlist[0] = NULL;
                        }

                        if(!empty($args))
                        {
                            foreach($cronlist as $key => $value)
                            {
                                foreach($value as $k => $v)
                                {
                                    foreach($v as $x => $y)
                                    {
                                        foreach($args as $arg => $val)
                                        {
                                            if ($y['args'][$arg] == $val)
                                            {
                                                //@param $hooks = array($hook);
                                                //@param $args = array($arg);
                                                //Return an array of cron task specified filtered by arg
                                                $filter[$x] = $y;
                                                if(!$filter && is_array($hooks) && is_array($args))
                                                {
                                                    $filter[0] = NULL;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }


            if(is_array($hooks) && $args === false && $cronlist)
            {
                return $cronlist;
            }
            else if(is_array($hooks) && is_array($args) && $filter)
            {
                return $filter;
            }
            else if($hooks === 'schedule' && $args === false && $schedule)
            {
                return $schedule;
            }
            else if($hooks === false && $args === false && $crons)
            {
                return $crons;
            }
            else
            {
                return false;
            }
        }

//Usage
    $cron_filtered = kw_filter_crons_hooks(array('your_function'), array('param_1' => value));
    var_dump($cron_filtered);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.