PHP का उपयोग करके क्रोन जॉब कैसे बनाएं?


100

मैं क्रॉन जॉब इस्तेमाल करने के लिए नया हूं। मुझे यह भी नहीं पता कि इसे कैसे लिखना है। मैंने इंटरनेट से खोज करने की कोशिश की है, लेकिन मैं अभी भी इसे अच्छी तरह से नहीं समझ पाया हूं। मैं एक क्रोन नौकरी बनाना चाहता हूं जो हर मिनट मेरे कोड को निष्पादित करेगी। मैं इसे बनाने के लिए PHP का उपयोग कर रहा हूँ। यह काम नहीं कर रहा है।

उदाहरण

run.php (हर मिनट निष्पादित होने वाला कोड)

<?php

echo "This code will run every minute";

?>

cron.php

<?php

$path = dirname(__FILE__);
$cron = $path . "/run.php";
echo exec("***** php -q ".$cron." &> /dev/null");

?>

मान लीजिए कि ये दोनों फाइलें एक ही फ़ोल्डर में हैं।

क्या जो कोड मैंने गलत किया है? अगर गलत है, तो कृपया मुझे बताएं कि इसे कैसे ठीक किया जाए।


क्या आपके पास सर्वर पर शेल एक्सेस है?

8
आप सिर्फ बाहर ही नहीं गूँज सकते हैं और उम्मीद करते हैं कि क्रोनजोब बनाया जाए। यहां तक पढ़ा गया cronjobs (यह मानते हुए कि आप एक सर्वर चल लिनक्स पर कर रहे हैं) बनाने का तरीका thesitewizard.com/general/set-cron-job.shtml
tlenss

@ डागन: मुझे इस बारे में पता नहीं है। मैं इसे देख लूँगा।
user2738520

यह एक बंद घटना है इसलिए उपयोग करेंcrontab
एड हील

जवाबों:


66

यह PHP में कोड के साथ सबसे अच्छा स्पष्टीकरण है जो मैंने अब तक पाया है:

http://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428

संक्षेप में:

हालाँकि किसी नए कार्य को निर्धारित करने का वाक्य-विन्यास पहली नज़र में कठिन लग सकता है, लेकिन इसे तोड़ने से पहले आपको समझना वास्तव में अपेक्षाकृत सरल है। क्रॉन जॉब में हमेशा पांच कॉलम होंगे, जिनमें से प्रत्येक एक कालानुक्रमिक 'ऑपरेटर' का प्रतिनिधित्व करता है और जिसे पूरा करने के लिए पूरा रास्ता और कमांड होता है:

* * * * * घर / पथ / से / आज्ञा / the_command.sh

कालानुक्रमिक स्तंभों में से प्रत्येक कार्य की अनुसूची के लिए एक विशिष्ट प्रासंगिकता है। वे इस प्रकार हैं:

Minutes represents the minutes of a given hour, 0-59 respectively.
Hours represents the hours of a given day, 0-23 respectively.
Days represents the days of a given month, 1-31 respectively.
Months represents the months of a given year, 1-12 respectively.
Day of the Week represents the day of the week, Sunday through Saturday, numerically, as 0-6 respectively.

यहां छवि विवरण दर्ज करें

इसलिए, उदाहरण के लिए, यदि कोई हर महीने के पहले दिन 12 बजे के लिए किसी कार्य को शेड्यूल करना चाहता है, तो यह कुछ इस तरह दिखाई देगा:

० ० १ * * घर / पथ / से / आज्ञा / the_command.sh

यदि हम प्रत्येक शनिवार को प्रातः 8:30 बजे चलाने का कार्य निर्धारित करना चाहते हैं, तो हम इसे इस प्रकार लिखेंगे:

30 8 * * 6 घर / पथ / से / आज्ञा / the_command.sh

कई ऑपरेटर भी हैं जिनका उपयोग आगे भी अनुसूची को अनुकूलित करने के लिए किया जा सकता है:

Commas is used to create a comma separated list of values for any of the cron columns.
Dashes is used to specify a range of values.
Asterisksis used to specify 'all' or 'every' value

पूर्ण लेख के लिए लिंक पर जाएं, यह बताता है:

  1. यदि आप इसे मैन्युअल रूप से दर्ज / संपादित करना चाहते हैं तो क्रोनजॉब का प्रारूप क्या है।
  2. उपयोगकर्ता के रूप में प्रमाणित करने के लिए SSH2 लाइब्रेरी के साथ PHP का उपयोग कैसे करें, जिस कॉन्टैब को आप संपादित करने जा रहे हैं।
  3. ऑथेंटिकेशन, एडिटिंग और डिलीटिंग क्रॉस्टैब एंट्रीज के लिए सभी जरूरी तरीकों के साथ फुल पीएचपी क्लास।

34

उसी तरह से आप cron.php चलाने की कोशिश कर रहे हैं, आप एक और PHP स्क्रिप्ट चला सकते हैं। आपको सीएलआई इंटरफेस के माध्यम से ऐसा करना होगा।

#!/usr/bin/env php
<?php
# This file would be say, '/usr/local/bin/run.php'
// code
echo "this was run from CRON";

फिर, कोंट्राब में एक प्रविष्टि जोड़ें:

* * * * * /usr/bin/php -f /usr/local/bin/run.php &> /dev/null

यदि run.php स्क्रिप्ट में निष्पादन योग्य अनुमतियाँ थीं, तो इसे सीधे crontab में सूचीबद्ध किया जा सकता है, बिना / usr / bin / php भाग के बिना। स्क्रिप्ट में 'env php' भाग वास्तव में PHP कोड को चलाने के लिए उपयुक्त प्रोग्राम मिलेगा। इसलिए, 'निष्पादन योग्य' संस्करण के लिए - फ़ाइल के लिए निष्पादन योग्य अनुमति जोड़ें:

chmod +x /usr/local/bin/run.php

और फिर, crontab में निम्नलिखित प्रविष्टि जोड़ें:

* * * * * /usr/local/bin/run.php &> /dev/null

11

एलिस्टर में जोड़ा गया, आप सर्वर पर एक ssh सत्र में crontab -e दर्ज करके आमतौर पर crontab को संपादित कर सकते हैं (हमेशा मामला नहीं)।

सितारे प्रतिनिधित्व करते हैं (* इस इकाई का प्रत्येक अर्थ है):

[Minute] [Hour] [Day] [Month] [Day of week (0 =sunday to 6 =saturday)] [Command]

आप इसके बारे में कुछ और पढ़ सकते हैं यहाँ


2

निम्नलिखित को linux / ubuntu टर्मिनल में टाइप करें

 crontab -e 

एक संपादक का चयन करें (कभी-कभी यह संपादक से पूछता है) और इसे हर मिनट के लिए चलाने के लिए

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null

1

यदि आप अपनी खुद की सामग्री की मेजबानी नहीं कर रहे हैं तो यह आपके वेब होस्ट पर निर्भर हो सकता है। यदि आपका वेब होस्ट क्रोन जॉब्स बनाने का समर्थन करता है, तो आपके पास उन्हें भरने के लिए एक फॉर्म हो सकता है जो आपको फ़्रीक्वेंसी का चयन करने और फ़ाइल को निष्पादित करने के लिए निरपेक्ष पथ इनपुट करता है। उदाहरण के लिए, मेरी वेब होस्ट (ड्रीमहॉस्ट) मुझे फ़ाइल के निरपेक्ष पथ में टाइप करके और चुनिंदा मेनू से आवृत्ति का चयन करके कस्टम क्रोन जॉब्स बनाने की अनुमति देती है। यह आपके सर्वर के लिए संभव नहीं हो सकता है, इस स्थिति में आपको सीधे या अपने मेजबान विशिष्ट विधि के माध्यम से कॉट्रैब को संपादित करने की आवश्यकता होती है।

जैसा कि एलिस्टर बुलमैन ने ऊपर विवरण दिया है, CLI का उपयोग करके चलाने के लिए एक PHP फ़ाइल बनाएँ ( टैग #!/usr/bin/env phpसे पहले फ़ाइल के बहुत शुरुआत में शामिल करना सुनिश्चित करें <?php। यह सुनिश्चित करता है कि शेल जानता है कि स्क्रिप्ट चलाते समय कौन सा निष्पादन योग्य होना चाहिए।


0

आप कर्ल का उपयोग क्यों नहीं करते हैं? तार्किक रूप से, यदि आप php फ़ाइल निष्पादित करते हैं, तो आप अपने ब्राउज़र पर url द्वारा निष्पादित करेंगे। यदि आप कर्ल चलाते हैं तो यह बहुत आसान है

while(true)
{
    sleep(60); // sleep for 60 sec = 1 minute

    $s = curl_init();
    curl_setopt($s,CURLOPT_URL, $your_php_url_to_cron); 
    curl_exec($s); 
    curl_getinfo($s,CURLINFO_HTTP_CODE); 
    curl_close($s);
}

5
यह सिद्धांत में काम करेगा लेकिन php-script को हर समय चलना होगा जो अच्छी बात नहीं है।
बेस्टप्रोग्राममेनिथवर्ल्ड

1
आपको इसे हमेशा के लिए चलाने के लिए php-max-execute-time 0 होना चाहिए। इसके अलावा अगर आपकी स्क्रिप्ट में कुछ त्रुटि होती है, तो यह तब तक फिर से निष्पादित नहीं होगा जब तक आप इसे मैन्युअल रूप से पुनरारंभ नहीं करते।
हसन रज़ा

0

$command = "php ".CRON_PATH.php ";
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $command, "r"));
}else{
shell_exec($command ." > /dev/null &");
}


6
जितना मुझे आपके कोड्स में दिलचस्पी है, क्या आप समझा सकते हैं?
कीमती टॉम

0

पहले अपना SSH सर्वर यूज़रनेम और पासवर्ड के साथ खोलें और डिफ़ॉल्ट रूट उपयोगकर्ता में बदलें (सभी अनुमतियों के साथ उपयोगकर्ता) फिर नीचे दिए गए चरणों का पालन करें,

  1. कमांड दर्ज करें crontab -lअब आप सभी क्रोनॉजरों की सूची देखेंगे।
  2. दर्ज crontab -eसभी क्रोन नौकरियों के साथ एक फ़ाइल जाएगी।
  3. फ़ाइल को अपने क्रोनजोब शेड्यूल के साथ संपादित करें min hr dayofmonth month dayofweek pathtocronjobfile सहेजें।
  4. अब आपको एक प्रतिक्रिया दिखाई देगी crontab: installing new crontabअब फिर से क्रोनॉजर्स की सूची की जांच करें आपकी क्रोन नौकरी वहां सूचीबद्ध होगी।

0

इस कार्य के लिए लिनक्स क्रोनजोब के साथ संयोजन में प्रोजेक्ट क्रोन का बेहतर उपयोग करें । यह आपको अपने PHP कोड में रन टाइम कॉन्फ़िगर करने, बैकग्राउंड जॉब्स को सपोर्ट करने और उपयोग करने में आसान है।

पहला चरण हर मिनट में एक PHP स्क्रिप्ट को कॉल करें:

* * * * * /usr/local/bin/run.php &> /dev/null

दूसरा चरण PHP में सीधे चलाने के समय को कॉन्फ़िगर करने के लिए cron / cron पैकेज का उपयोग करें ।

$deprecatedStatus = new ShellJob();
$deprecatedStatus->setCommand('cd /app && /usr/local/bin/php cron/updateDeprecatedStatus.php');
$deprecatedStatus->setSchedule(new CrontabSchedule('* * * * */2'));


$displayDate = new ShellJob();
$displayDate->setCommand('cd /app && /usr/local/bin/php cron/updateDisplayDate.php');
$displayDate->setSchedule(new CrontabSchedule('* * * * */5'));

आपने लिंक किए गए रिपॉजिटरी में उपयोग करने का विवरण पाया।


-1

हर मिनट काम करने के लिए इस तरह क्रोनजोब बनाएं

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null

4
मुझे लगता है कि हम php का उपयोग करके क्रोनजोब बनाने के लिए समाधान देख रहे हैं और किसी भी टर्मिनल या cpanel का उपयोग नहीं कर रहे हैं। मैं भी केवल php का उपयोग करके इस समाधान को खोजना चाहता हूं।
user3264863

-1

इसे हल करने का एक सरल तरीका है: आप हर 1 मिनट में क्रोन द्वारा php फाइल को निष्पादित कर सकते हैं, और php निष्पादन योग्य फ़ाइल को "if" स्टेटमेंट को निष्पादित करने के लिए "जब" इस तरह से बनाते हैं।

<?/** suppose we have 1 hour and 1 minute inteval 01:01 */

$interval_source = "01:01";
$time_now = strtotime( "now" ) / 60;
$interval = substr($interval_source,0,2) * 60 + substr($interval_source,3,2);


if( $time_now % $interval == 0){
/** do cronjob */
}

4
यह केवल तभी काम करेगा जब आप पृष्ठ को लोड करेंगे, मूल रूप से यह एक समाधान नहीं है!
एमडी। अतीकुर्रहमान

अगर मैं ब्राउज़र बंद कर दूं तो क्या होगा? यह विफल हो जाता है!
रेशी अग्रवाल

-2
function _cron_exe($schedules) {
        if ($obj->get_option('cronenabledisable') == "yes") {
            // $interval = 1*20;
            $interval = $obj->get_option('cronhowtime');
            if ($obj->get_option('crontiming') == 'minutes') {
                $interval = $interval * 60;
            } else if ($obj->get_option('crontiming') == 'hours') {
                $interval = $interval * 3600;
            } else if ($obj->get_option('crontiming') == 'days') {
                $interval = $interval * 86400;
            }
            $schedules['hourlys'] = array(
                'interval' => $interval,
                'display' => 'cronjob'
            );
            return $schedules;
        }

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.