2013-08-05 8 views
5

मैंने एक सीआरओएन निर्धारित किया है जो प्रत्येक पांच मिनट में एक PHP स्क्रिप्ट को कॉल/निष्पादित करता है। PHP स्क्रिप्ट निम्नलिखित कार्यों को निष्पादित करता हैसीआरओएन द्वारा शुरू की गई PHP स्क्रिप्ट के निष्पादन को रोकें या रोकें?

  1. पिछला रन अभी भी निष्पादित होने पर यह पहचानने के लिए डेटाबेस में ध्वज मान के लिए जांच करता है। डीबी में 1 का मान बताता है कि प्रक्रिया अभी भी चल रही है जबकि 0 का मान यह है कि यह नहीं है।
  2. यदि ध्वज मान 1 है, तो PHP से बाहर निकलें और अगला चरण जारी रखें।
  3. डेटाबेस से फ्लैग मान को 0 से 1.
  4. व्यवसाय तर्क निष्पादित करें।
  5. ध्वज मान को 1 से 0 तक अपडेट करें, ताकि उपयोगकर्ता तालिका में डेटा उपलब्ध होने पर अगला सीआरओएन निष्पादित हो सके।

उपयोगकर्ता अपलोड किए गए डेटा के आकार के आधार पर सभी काम ठीक है, औसत पर प्रक्रिया को पूरा करने में 35 से 40 मिनट लगते हैं।

प्रश्न, क्या क्रॉन द्वारा शुरू किए गए PHP स्क्रिप्ट के निष्पादन को रोकने या रोकने के लिए वैसे भी है। उपयोगकर्ताओं को निष्पादन को रोकने, नए डेटा अपलोड करने और CRON चलाने की प्रतीक्षा करने के लिए एक बटन हो सकता है। मैं सभी झंडे और डेटा को रीसेट करने का ख्याल रख सकता हूं, यह सिर्फ PHP स्क्रिप्ट की हत्या है जिसे मैं समझने की कोशिश कर रहा हूं।

मैं कुछ गूगल किया था और मैं जैसे कुछ आदेशों का उपयोग कर सकते हैं लगा: सभी php प्रक्रियाओं सर्वर पर चल मारने के लिए

Killall -9 PHP 

, लेकिन कैसे पीएचपी के माध्यम से ऐसा करने के लिए यकीन नहीं।

उत्तर

1

आप system() या exec() कोशिश कर सकते हैं, लेकिन यह काम हो सकता है नहीं (या लौट अनुमति नहीं दी त्रुटियों) के रूप में क्रॉन प्रक्रियाओं या तो वर्तमान उपयोगकर्ता या जड़ से क्रियान्वित कर रहे हैं, और वेब सर्वर उपयोगकर्ता आमतौर पर इन प्रक्रियाओं के लिए पहुँच नहीं है ।

4

इस प्रयास करें:

ps aux |grep 'part_of_the_name_of_your_script'|awk '{print $2}' |xargs kill -9 {}

या अपने crontab फ़ाइल उपयोग crun में और चर CRUN_TIME crun -h

+1

हत्यारा एक लाइनर, धन्यवाद। मुझे '{}' के साथ त्रुटि मिली, जब मैंने इसे हटा दिया तो कमांड काम किया। –

1

एक lock file देखते हैं कि यह कार्यों के लिए बहुत उपयुक्त होगा। PHP स्क्रिप्ट एक नई फ़ाइल बनाने का प्रयास कर सकती है, और यदि कोई भी पहले से ही नहीं बनाया गया है तो आप सुरक्षित रूप से जान सकते हैं कि वर्तमान समय में स्क्रिप्ट ही चल रही है। अगर कोई फ़ाइल मौजूद है, तो आप बस स्क्रिप्ट से बाहर निकल सकते हैं।

उदाहरण:

<?php 

if (file_exists('/var/run/my-script')) { 
    exit(1); // already running 
} 

file_put_contents('/var/run/my-script', getmypid()); 

/** Business Logic **/ 

unlink('/var/run/my-script'); 
exit(0); 

?> 
+0

धन्यवाद लेकिन मुझे यकीन नहीं है कि यह इस मुद्दे को हाथ में हल करेगा या नहीं। आपने जो सुझाव दिया है वह यह देखने के लिए लॉक फ़ाइल का उपयोग कर रहा है कि स्क्रिप्ट पहले से चल रही है या नहीं। मैं पहले से ही डेटाबेस ध्वज की मदद से इसे प्रबंधित करने में सक्षम हूं (बहुत कुशल नहीं है लेकिन अभी के लिए काम कर रहा हूं)। जब मैं स्क्रिप्ट व्यापार तर्क को संसाधित करना शुरू करता हूं तो मैं जो खोज रहा हूं वह निष्पादन को रोकने का एक तरीका है। – Saurabh

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