2011-08-08 9 views
19

मैं लिनक्स में कमांड लाइन के माध्यम से लगातार पृष्ठभूमि में एक PHP स्क्रिप्ट चलाने की कोशिश कर रहा हूं। मैंने php filename.php & कमांड का प्रयास किया है, लेकिन ऐसा लगता है कि स्क्रिप्ट निष्पादन बहुत जल्दी समाप्त हो जाता है, जबकि प्रक्रिया समाप्त होने तक इसे जारी रखना चाहिए।पृष्ठभूमि प्रक्रिया के रूप में कमांड लाइन से PHP स्क्रिप्ट चलाना

कोई सुझाव?

+2

इसका मतलब क्या है कि यह जल्दी से समाप्त हो जाता है? अंत में और आपकी स्क्रिप्ट पृष्ठभूमि में चलते समय शेल कमांड निष्पादित करना जारी रखने के लिए आपको तुरंत संकेत देगा .. आप देख सकते हैं कि यह अभी भी "नौकरियां" टाइप करके चल रहा है – Zak

+1

क्या आपने त्रुटि_ रिपोर्टिंग (E_ALL) और सेटिंग सेट करने का प्रयास किया था display_errors = 1? कुछ त्रुटियां हो सकती हैं और आपकी प्रक्रिया असामान्य रूप से – marcelog

+2

को समाप्त कर सकती है: exec ("nohup php file.php>/dev/null 2> &1 &"); –

उत्तर

37

क्या आप वाकई स्क्रिप्ट में कोई त्रुटि नहीं है? यह सामान्य रूप से "निष्पादन को बहुत जल्दी" समाप्त करता है। सबसे पहले, किसी भी त्रुटि यह हो सकता है प्रदर्शित करने के लिए अपनी स्क्रिप्ट के शीर्ष पर error_reporting(E_ALL); ini_set('display_errors', 1); संलग्न है, तो आप उपयोग कर सकते हैं:

nohup php filename.php &

nohup एक कमांड सत्र डिस्कनेक्ट किया गया है, भले ही या उपयोगकर्ता लॉग चलाता है बाहर।

या

nohup php filename.php >/dev/null 2>&1 &

ऊपर, लेकिन nohup.out फ़ाइल का निर्माण नहीं करता के रूप में एक ही।


तुम भी उपयोग कर सकते हैं:
ignore_user_abort(1);

सेट करें कि एक ग्राहक डिस्कनेक्ट स्क्रिप्ट निष्पादन को निरस्त करना चाहिए


set_time_limit(0);

स्क्रिप्ट अधिकतम निष्पादन समय को सीमित करता है, इस मामले में यह प्रक्रिया समाप्त होने तक या अपाचे प्रक्रिया पुनरारंभ होने तक चलता रहेगा।


नोट्स

php और filename.php रास्तों एक पूर्ण पथ के रूप में प्रदान की जा सकती, php और filename.php के बजाय, आप /usr/bin/php और /full/path/to/filename.php उपयोग कर सकते हैं।
फ़ाइल से बचने के लिए पूर्ण पथ की सिफारिश की गई है त्रुटियां नहीं मिलीं।

+0

कोई आउटपुट रीडायरेक्शन नहीं होने पर स्क्रिप्ट को समाप्त करने के कारण स्क्रिप्ट को समाप्त कर दिया जाएगा? – Kyle

+1

@ पेड्रो लोबिटो आप को धन्यवाद। – whitesiroi

+0

आपका स्वागत है @whitesiroi –

15

आपका सत्र बंद होने पर प्रक्रिया बंद हो सकती है।

nohup php filename.php

+0

बहुत बढ़िया, धन्यवाद! – arik

2
nohup /path/to/command-name arg1 arg2 & 

का उपयोग करके देखें जहां:
command-name: खोल स्क्रिप्ट या कमांड नाम का नाम है। आप कमांड या शेल स्क्रिप्ट के लिए तर्क पारित कर सकते हैं।
&: नोहप स्वचालित रूप से पृष्ठभूमि में चलने वाले कमांड को नहीं डालता है; आपको & प्रतीक के साथ कमांड लाइन को समाप्त करके स्पष्ट रूप से ऐसा करना होगा। इस तरह के आदेशों में

+1

डुप्लिकेट [उत्तर] (http://stackoverflow.com/a/6989340/6209665)। और [कोड स्वरूपण] का उपयोग करें (https://meta.stackexchange.com/que Stions/22186/कैसे-do-i-format-my-code-block), कृपया। – Andrew

2
nohup php file.php > /dev/null 2>&1 & 

अधिक से अधिक-thans (>) कहीं कार्यक्रम के उत्पादन अनुप्रेषित। इस मामले में, कुछ /dev/null पर पुनः निर्देशित किया जा रहा है, और कुछ में, बाहर &1

स्टैंडर्ड पर पुनः निर्देशित किया जा रहा है, और त्रुटि

वहाँ एक कार्यक्रम के लिए इनपुट और आउटपुट के तीन मानक स्रोत हैं। मानक इनपुट आमतौर पर कीबोर्ड से आता है यदि यह एक इंटरैक्टिव प्रोग्राम है, या किसी अन्य प्रोग्राम से यदि यह अन्य प्रोग्राम के आउटपुट को प्रोसेस कर रहा है। कार्यक्रम आमतौर पर मानक आउटपुट को प्रिंट करता है, और कभी-कभी मानक त्रुटि के लिए प्रिंट करता है। ये तीन फ़ाइल डिस्क्रिप्टर (आप उन्हें "डेटा पाइप" के रूप में सोच सकते हैं) को अक्सर STDIN, STDOUT, and STDERR कहा जाता है।

कभी-कभी उनका नाम नहीं दिया जाता है, वे गिने जाते हैं! उनके लिए अंतर्निहित संख्या 0, 1, and 2 है, उस क्रम में। डिफ़ॉल्ट रूप से, यदि आप स्पष्ट रूप से नाम या नंबर नहीं देते हैं, तो आप STDOUT के बारे में बात कर रहे हैं।

उपरोक्त आदेश मानक आउटपुट को /dev/null पर रीडायरेक्ट कर रहा है, जो एक ऐसा स्थान है जहां आप जो कुछ भी नहीं चाहते हैं उसे डंप कर सकते हैं, फिर मानक त्रुटि को मानक आउटपुट में रीडायरेक्ट कर सकते हैं (आपको गंतव्य के सामने & रखना होगा यह करो)।

इसलिए, संक्षिप्त विवरण यह है कि "इस कमांड से सभी आउटपुट को ब्लैक होल में ले जाना चाहिए।" यह प्रोग्राम वास्तव में शांत होने का एक अच्छा तरीका है!

& अंत में पृष्ठभूमि में आदेश डालता है।

रेफरी: https://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/

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