2011-09-03 12 views
6

मैंने एक स्क्रिप्ट बनाई जो ignore_user_abort() फ़ंक्शन का उपयोग करके पृष्ठभूमि में चलता है। हालांकि, मैं स्क्रिप्ट को रोकने के लिए किसी भी तरह का कोड डालने के लिए पर्याप्त मूर्ख नहीं था और अब यह हर 30 सेकंड में ई-मेल भेज रहा है ...पृष्ठभूमि PHP स्क्रिप्ट (साझा होस्टिंग) को मारें

क्या स्क्रिप्ट को रोकने का कोई तरीका है? मैं एक साझा होस्टिंग में हूं, इसलिए मेरे पास कमांड प्रॉम्प्ट तक पहुंच नहीं है, और मुझे पीआईडी ​​नहीं पता है।

+0

आप SSH उपयोग कर सकते है बदलने से पहले तय हो गई? '/ Bin/ps' चलाने के लिए और पता लगाने के लिए अपमानजनक प्रक्रिया के पीआईडी, तो [' posix_kill'] (http://ca.php.net/manual/en/function.posix-kill.php –

+2

उपयोग 'system') इसे मारने के लिए। हो सकता है कि आपके साझा होस्टिंग प्रदाता के पास कुछ प्रकार का नियंत्रण कक्ष हो जिसमें प्रक्रिया प्रबंधन उपकरण हों। –

+3

यदि यह एकवचन घटना है, तो आपको केवल समर्थन कॉल करना चाहिए ... – Olaf

उत्तर

0

आपने स्क्रिप्ट को कैसे तैनात किया? निश्चित रूप से आप इसे हटा सकते हैं (यदि यह एक स्वीकार्य विकल्प है)। अन्यथा इसे संशोधित करें और सर्वर के समय के आधार पर प्रत्येक एन मिनट/घंटे/दिन में एक बार मेल भेजने की अनुमति देने के लिए कुछ तर्क डालें?

पुन:। स्क्रिप्ट को निष्पादित करने से रोकना (या बल्कि सिस्टम इसे निष्पादित करने का प्रयास कर रहा है) आपने इसे निष्पादन के लिए कैसे शेड्यूल किया? क्या यह क्रॉन्टाब या कुछ के लिए कुछ प्रकार का गुई है? क्या आप केवल वही नहीं कर सकते जो आपने वहां किया था (क्योंकि आपके पास कमांड लाइन/टर्मिनल तक कोई पहुंच नहीं है)?

लूटने ganly

4

वहाँ स्क्रिप्ट को रोकने के लिए कोई तरीका है? मैं एक साझा होस्टिंग में हूं, इसलिए मेरे पास कमांड प्रॉम्प्ट तक पहुंच नहीं है, और मुझे पीआईडी ​​नहीं पता है।

फिर नहीं।

लेकिन क्या आप सुनिश्चित हैं कि आपके पास कोई खोल पहुंच नहीं है? PHP के माध्यम से भी? यदि आप करते हैं, तो आप की कोशिश कर सकते ....

<?php 

print `ps -ef | grep php`; 

... और आप देखेंगे कि उसके बाद से इस प्रक्रिया की पहचान कर सकते हैं अगर ....

<?php 

$pid=12345; // for example. 
print `kill -9 $pid`; 

और आप की जरूरत नहीं है, भले ही पहुँच खोल आदेशों को चलाने के लिए, आप ..../proc में पीआईडी ​​(एक Linux सिस्टम पर) खोजने के लिए और POSIX एक्सटेंशन का उपयोग कर इसे समाप्त करने के लिए सक्षम हो सकता है

<?php 

$ps=glob('/proc/[0-9]*'); 
foreach ($ps as $p) { 
    if (is_dir($p) && is_writeable($p)) { 
     print "proc= " . basename($p); 
     $cmd=file_get_contents($p . '/cmdline'); 
     print "/" . file_get_contents($p . '/cmdline'); 
     if (preg_match('/(php).*(myscript.php)/',$cmd)) { 
      posix_kill(basename($p), SIGKILL); 
      print " xxxxx...."; 
      break; 
     } 
     print "\n"; 
    } 
} 
0

, बस। समर्थन पर कॉल करें, इसे रद्द करें। अगली बार, उस चीज़ को निष्पादित न करें जिसे आप नियंत्रित नहीं कर सकते।

1

मैं कल इस धागे पर आया था! मुझे गलती से एक पृष्ठ में एक अनंत लूप था जिसे देखा जाना नहीं था और इससे मेरा I/O to 100 और CPU usage to 100I/O कुछ php errors की वजह से था और इसे logged प्राप्त हो रहा था और लॉग फ़ाइल का आकार किसी के विचार से आगे बढ़ रहा था।

उपरोक्त में से कोई भी चाल मेरे shared hosting पर काम नहीं करती है।

मेरा समाधान

  1. cPanel में, PHP संस्करण (वर्तमान की कि को छोड़कर) के लिए जाना

  2. कुछ समय के लिए किसी भी पीएचपी संस्करण का चयन करें।

  3. और फिर Apply Changes

कारण यह क्यों काम किया

स्क्रिप्ट जो कुछ php त्रुटियों के साथ अनंत लूप था एक प्रक्रिया तो मैं बस यह मारने के लिए, बदल रहा है PHP संस्करण php और अपाचे जैसी सेवाओं को फिर से प्रारंभ सुदृढ़ की जरूरत थी, और के रूप में पुनः आरंभ शामिल था पहले प्रक्रियाओं की मौत हो गई, और मैं I/O के रूप में आराम से हो गया था और CPU उपयोग स्थिर हो। इसके अलावा, मुझे लगता है कि बग हाथ php संस्करण :)

+1

आपने अभी अपना दिन बचाया .. धन्यवाद आदमी –

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