2010-12-21 14 views
5

एक अलग प्रक्रिया में सिम्फनी कार्यों को चलाने का सही तरीका क्या है। मेरा पहला अनुमान फोर्क/निष्पादन का उपयोग करना होगा, लेकिन this के अनुसार, आप इसे कुछ भी नहीं कर सकते जो खुले फ़ाइल डिस्क्रिप्टर या कनेक्शन (जैसे MySQL) रखता है। तो यह एक विकल्प की तरह नहीं लगता है। एक और विकल्प exec('symfony taskname &') करना है, लेकिन यह एक हैक जैसा लगता है। क्या मैं सबसे अच्छा कर सकता हूं? क्या कोई तीसरा तरीका है?किसी कार्रवाई से पृष्ठभूमि में सिम्फनी कार्य को ठीक से कैसे चलाएं?

+0

pcntl_fork फ़ंक्शन केवल php के cgi संस्करण के लिए काम करता है। यदि आप apache के माध्यम से php चला रहे हैं तो यह कोई नहीं है। निष्पादन का उपयोग करना अपाचे के साथ ऐसा करने का एकमात्र तरीका है लेकिन यह निश्चित रूप से बदसूरत है और एक ही समय में निष्पादित करने के लिए चुपचाप चलाना चाहिए। – Jestep

+0

मुझे यह पता लगाने में काफी समय लगा कि आपको वास्तव में चलाने के लिए एक फ़ाइल में stdout को रीडायरेक्ट करना होगा। क्या आप "चुपचाप चलाने" से क्या मतलब है? –

उत्तर

3

यहाँ कैसे मैं यह कर समाप्त हो गया है वास्तविक आउटपुट चाहते हैं)। मेरे मामले में मैंने सिम्फनी के फ़ाइल लॉगर का उपयोग करने के लिए अपने सभी कार्यों को स्थापित किया, इसलिए यह कोई मुद्दा नहीं था।

हालांकि मैं अभी भी एक बेहतर समाधान की तलाश में हूं। यह एक हैक की तरह लगता है।

-8

PHP कोई बहुभाषी नहीं जानता है।
और हाँ यह PHP आईएमओ में एक बड़ी खामियां है।
मल्टीथ्रेडिंग करने का एक तरीका है, लेकिन इसकी अनुशंसा नहीं की जाती है। यह जटिल है, और यह बदसूरत है और यह पूछ रहा है, समस्याओं के लिए कोई फोन नहीं।

तो, मुझे लगता है कि आप जो कर सकते हैं वह सबसे अच्छा है जैसे कि निष्पादन की तरह कुछ, या किसी तरह की वेब सेवा जैसे कॉलिंग को कॉल करना?

exec('nohup ' . sfConfig::get('sf_root_dir') . '/symfony TASKNAME >/dev/null &'); 

आप STDOUT रीडायरेक्ट करने के लिए है, वरना यह पृष्ठभूमि में नहीं चलेंगे (हालांकि आप उपयोग करने के लिए/dev/बातिल अगर आप की जरूरत नहीं है:

+0

क्या? http://php.net/manual/hi/book.pthreads.php (ओह, इसकी 2010) :) – Nicklasos

4

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