2013-10-03 25 views
5

मैं एक वेबसाइट के लिए एक स्क्रैपर निष्पादित और जानकारी के साथ ईमेल भेजने के लिए एक क्रॉन नौकरी की जरूरत है, मुझे लगता है कि करने के लिए एक नियंत्रक बना है, लेकिन उस फ़ाइल को चलाने के लिए जब मैं आदेश की स्थापनाएक क्रॉन जॉब Laravel में 4

 
php app/controllers/ScraperController.php 

मैं यह त्रुटि

PHP Fatal error: Class 'BaseController' not found in /var/www/U-Scraper/app/controllers/ScraperController.php on line 2

बात यह काम करता है जब मुझे लगता है कि नियंत्रक

+0

सबसे अच्छा तरीका मार्ग खींचने और http अनुरोध के साथ cronjobs चलाने का सबसे अच्छा तरीका है। – vinsa

उत्तर

10

नियंत्रकों द्वारा स्वयं नहीं चला के लिए एक मार्ग के साथ की स्थापना की, पर, वे Laravel के एक घटक के रूप में काम मिलता है । यदि आप सीधे अपने नियंत्रक को लोड कर रहे हैं तो लैरावेल लोड नहीं किया जा रहा है और जहां तक ​​PHP BaseController, साथ ही लैरवेल की Controller कक्षा से संबंधित है, मौजूद नहीं है। आम तौर पर आपका वेब सर्वर public/index.php लोड करता है जो लैरवेल लोड करता है और इसी तरह। यदि यह भ्रमित है तो आप सीख सकते हैं कि कंपोज़र के साथ ऑटोलोडिंग कैसे काम करता है: http://net.tutsplus.com/tutorials/php/easy-package-management-with-composer/

आपको क्या करना चाहिए write an Artisan command जो आपको चाहिए और क्रॉन का उपयोग करके उस आदेश को कॉल करें। यह प्रश्न इस बात को पूरा करने के बारे में विवरण देता है: Cron Job in Laravel

+0

वैकल्पिक रूप से, आप setcronjob + iron.io पुश कतार जैसी सेवा का भी उपयोग कर सकते हैं। मैं इसे उत्पादन सर्वर में उपयोग करता हूं जहां मुझे क्रोंटैब तक पहुंच नहीं है। – Arda

+0

@Arda क्या आप उस दृष्टिकोण को थोड़ा समझा सकते हैं? उस पर कोई जानकारी? मैंने लोहा के उद्देश्य को कभी नहीं समझा। – itachi

+1

@itachi इस तरह सोचें: मेरे उदाहरण में, लोहा.ओ क्या करता है अनुरोध पर जाता है और आपके लिए पूरा करने की प्रतीक्षा करता है। आप setcronjob के लिए एक conjob अनुरोध करते हैं, उस समय, cronjob सेवा कतार इंजन ट्रिगर करता है, कतार इंजन आपके कार्रवाई के लिए एक पुश अनुरोध करता है और यह पूरा होने तक इंतजार कर रहा है। क्रोनबॉज सेवा भी इंतजार कर सकती है (सेटक्रोनबॉज केवल 15 सेकेंड की तरह इंतजार कर सकता है अगर मुझे सही याद आती है), लेकिन आपके अनुरोध में अधिक समय लग सकता है (एक दूरस्थ एसएमटीपी सेवा आदि के साथ बड़े पैमाने पर ईमेलिंग की तरह कल्पना करें और 1000 व्यक्तियों को ईमेल भेजना), तो क्यूइंग लाता है यहां लाभ – Arda

3

मैं आपको नियंत्रक के बजाय नया आर्टिसन कमांड बनाने का सुझाव देता हूं।

फिर क्रॉन कार्य उदाहरण के लिए, अपने आदेश चलाने के लिए सेट:

1 * * * * /usr/bin/php /path/to/the/artisan nameofthecustomcommand 

आप नहीं चलाते हैं कर सकते हैं/सेट कार्य इस तरह से है, लेकिन आप के बारे में

http://mydomain.com/cron.php 

// cron.php 
// I am aware I do use exec() 
exec('php artisan nameofthecustomcommand'); 

अधिक निष्पादित करने के लिए URL सेट कर सकते कारीगर आदेश here

इसकी भी संभावना है, तो आप कोड छुए बिना ही इस आदेश में पूरी नियंत्रक विधि डाल सकते हैं;)

+0

मैं मानता हूं कि कारीगर कमांड बनाना शायद सबसे अच्छा है, लेकिन कुछ परिस्थितियों में एक LYNX कमांड का CRON उपयोग किया जा सकता है - खासकर यदि आप ब्राउज़र से एक ही कार्य को चलाने का विकल्प चाहते हैं। – Snapey

0

इस तरह मैंने लैरवेल 4 और आर्टिसन कमांड फ़ंक्शन का उपयोग करके सीआरओएन नौकरियां स्थापित की हैं।

सबसे पहले, आर्टिसन का उपयोग करके एक नया आदेश बनाएं। कमांड लाइन प्रकार से:

php artisan command:make FooCommand

अपने app/commands फ़ोल्डर में आप अब FooCommand.php नामक एक नई फ़ाइल होगा।

उस फ़ाइल को खोलें और फ़ंक्शन fire() पर अपना कोड लिखें। यह हर बार आपका आदेश चलाएगा। कुछ अन्य फ़ंक्शन हैं जो आपको कमांड लाइन से तर्क और विकल्प कैप्चर करने की अनुमति देते हैं।

आपकी कमांड फ़ाइल में $name और $description वेरिएबल्स भी भरने की आवश्यकता है।अपने काम के लिए एक अच्छा नाम और वर्णन दें की तरह:

/** 
* The console command name. 
* 
* @var string 
*/ 
protected $name = 'command:my_foo_command'; 

/** 
* The console command description. 
* 
* @var string 
*/ 
protected $description = 'A description of what the command does'; 

ऐसा करने के बाद आप app/start/artisan.php खोलने और जोड़कर कारीगर को यह रजिस्टर करने की आवश्यकता:

Artisan::add(new FooCommand);

तब में कारीगर का उपयोग कर कमांड लाइन आप का उपयोग कर अपने काम चला सकते हैं:

php artisan command:my_foo_command 

यह केवल आदेश एक बार लागू करेगा - करने के लिए इसे फिर से पर चल रहा हो gular आधार निम्नलिखित को अपने CRONTAB में जोड़ें:

1 * * * * /usr/bin/php /path/to/the/artisan command:my_foo_command 
+0

मैं इसे अपने टर्मिनल 'php artisan cronjob: execute' में कर रहा हूं लेकिन यह मुझे त्रुटि रनटाइम अपवाद दे रहा है .. पर्याप्त तर्क नहीं .. –

+0

अपने टर्मिनल में कमांड चलाने के लिए आपको 'php artisan command: my_foo_command चलाने की आवश्यकता होगी '। 'My_foo_command' आपके कमांड फ़ाइल में आपके द्वारा सेट की गई कमांड का नाम होने के साथ। – ajtrichards

संबंधित मुद्दे