2015-11-15 16 views
5

पर कर्ल विकल्प मैं वर्तमान में सर्वर पक्ष पर यूआरएल लोड करने के लिए निम्न php exec कमांड का उपयोग कर रहा हूं क्योंकि मुझे ऐसे समाधान की आवश्यकता है जिसमें क्रॉन नौकरी शामिल न हो और यह भी असीमित है यानी उपयोगकर्ता नेविगेट कर सकते हैं दूर पेज फार्म एक बार काम शुरू किया जाता है और कार्य अभी भी निष्पादित करेंगे:क्रॉन जॉब PHP

exec("nohup curl ".$dbupdateurl." > /dev/null 2>&1 & echo $!"); 

इस बार के ठीक से काम करता है सबसे तथापि बल्कि अप्रत्याशित है। क्या यह हासिल करने के लिए एक बेहतर/अधिक ठोस तरीका है?

धन्यवाद,

मैट

+0

* अप्रत्याशित * से आपका क्या मतलब है? –

+0

मैं एक WordPress वातावरण के भीतर डेटाबेस बनाने के लिए पृष्ठ का उपयोग कर रहा हूँ। कभी-कभी स्क्रिप्ट खत्म नहीं होती है, यानी केवल 80% डेटाबेस बनाता है। – user1419810

+0

स्क्रिप्ट के साथ किसी समस्या की तरह लगता है कि इसे कैसे कहा जाता है –

उत्तर

0

आप PHP-एफ पी एम का उपयोग कर रहे हैं, तो आप fastcgi_finish_request उपयोग कर सकते हैं:

इस समारोह ग्राहक के लिए सभी प्रतिक्रिया डेटा flushes और अनुरोध खत्म। यह क्लाइंट के कनेक्शन को छोड़ दिए बिना समय लेने वाले कार्यों को निष्पादित करने की अनुमति देता है।

इस तरह आप उपयोगकर्ता को पहले से ही प्रतिक्रिया प्राप्त करने के बाद PHP के मूल कार्यों का उपयोग कर सकते हैं। आप PHP-एफ पी एम का उपयोग नहीं कर रहे हैं, तो कैसे इस सुविधा का उपयोग करने के बारे में एक उदाहरण example of how to use fastcgi_finish_request()

में पाया जा सकता है, तो आप Gearman की तरह एक JobQueue का उपयोग मूल अनुरोध के बाहर काम करने के लिए कर सकते हैं। यह संभवतः ऐसा करने का सबसे विश्वसनीय तरीका है, क्योंकि यह इस प्रकार की नौकरियों को संभालने के लिए एक समर्पित प्रणाली है।

यह भी ध्यान दें कि curl can do async http requests। यदि समस्या यह है कि आप http प्रतिक्रिया के लिए इंतजार नहीं करना चाहते हैं, तो यह जॉबक्यूयू शुरू करने से एक आसान समाधान हो सकता है।

अंतिम लेकिन कम से कम नहीं, आप काम करने के लिए अतिरिक्त PHP प्रक्रिया को फोर्क कर सकते हैं। How can I do time consuming task after sending response to client और php execute a background process

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