यदि एक ही कार्य पहले से चल रहा है तो मैं एक निर्धारित कार्य को चलने से कैसे रोक सकता हूँ?


11

मैंने यह जांचने के लिए एक php स्क्रिप्ट लिखी है कि क्या किसी फोल्डर में नई फाइलें हैं और यदि कोई नई फाइल मौजूद है, तो उन्हें सर्वर पर अपलोड करें। ये फाइलें काफी बड़ी हो सकती हैं। मैं इस स्क्रिप्ट को बार-बार चलाना चाहता हूं-चलो हर 5 मिनट के लिए-एक शेड्यूल किए गए कार्य के रूप में, ताकि फाइलों को जल्द से जल्द सर्वर में ले जाया जाए। हालाँकि, जब स्क्रिप्ट पहले से ही फ़ाइल अपलोड करने का प्रयास कर रही है, मैं नहीं चाहता कि इसे फिर से चलाया जाए, क्योंकि मुझे डर है कि दूसरा उदाहरण उस फ़ाइल को अधिलेखित कर देगा जो पहले से ही सर्वर पर अपलोड हो रही है।

जब तक स्क्रिप्ट पहले से चल रही हो, मैं स्क्रिप्ट को एक निर्धारित कार्य के रूप में कैसे चला सकता हूं?

जवाबों:


21

यह मानकर कि आप XP "शेड्यूल किए गए कार्य" सिस्टम में "रिपीट" करने के लिए कार्य सेट कर रहे हैं, आपके हिस्से पर आगे की कार्रवाई की आवश्यकता नहीं है। यदि यह पहले से ही चल रहा है, तो शेड्यूल्ड टास्क "रिपीट" नहीं होगा।

यदि आप उस डिफ़ॉल्ट को ओवरराइड करना चाहते हैं, तो आप बॉक्स को चेक कर सकते हैं "यदि कार्य अभी भी चल रहा है, तो उसे इस समय रोक दें" कार्य शेड्यूलर को एक नया शुरू करने से पहले अंतिम उदाहरण को मारने का कारण बनता है (हालांकि ऐसा लगता है कि आप शायद डॉन करते हैं 'ऐसा नहीं चाहते)।


2

जिस तरह से मैंने यह किया है वह कार्य बैच फ़ाइल से चलाने के लिए है जो दिन में एक बार आधी रात के बाद शुरू होता है और अगले आधी रात तक चलता है। इसका लाभ यह है कि क्योंकि यह एक एकल स्क्रिप्ट है जिसे आप एक दूसरा उदाहरण नहीं चला सकते हैं। मुझे लगता है कि एक नुकसान यह हो सकता है कि आप भविष्यवाणी कर सकते हैं कि स्क्रिप्ट कितनी बार चलती है क्योंकि यह प्रत्येक रन के बाद एक निर्धारित समय की प्रतीक्षा करेगी। किसी भी तरह अगर आप मेरी स्क्रिप्ट में रुचि रखते हैं तो ऐसा दिखता है:

rem *** Get the day number. When the day number changes that signals
rem *** the script to exit.

for /f "tokens=1" %%i in ('date /t') do set THEDATE=%%i
set THEDAY=%THEDATE:~0,2%

rem *** Open the log file

echo Starting Whatever >%LOGFILE%
date /t >>%LOGFILE%
echo . >>%LOGFILE%

rem *** Start the monitoring loop

:start

rem *** Run your script

rem Run the script here

rem *** Pause for 300 seconds

sleep 300

rem *** Check the day number. If it is still the same loop back to the
rem *** start of the monitoring loop.

for /f "tokens=1" %%i in ('date /t') do set THEDATE=%%i
if %THEDATE:~0,2% == %THEDAY% goto start

जे आर


1

विंडोज़ टास्क शेड्यूलर में कार्य फिर से शुरू होने पर पहले से ही कार्य चल रहा है तो क्या करना है इसके लिए एक चेकबॉक्स (या विकल्प) है। आप इसे समानांतर में शुरू या चलाने के लिए नहीं सेट कर सकते हैं


1
XP कार्य अनुसूचक में वह सेटिंग कहाँ है? मैं समानांतर में एक ही कार्य को कई बार निष्पादित करने के लिए XP अनुसूचक प्राप्त करने का कोई तरीका नहीं ढूंढ रहा हूं।
इवान एंडरसन

विस्टा। मैंने अपना उत्तर दर्ज करने के बाद windows-xp टैग को देखा।
केविन कुफाल

0

कार्य शुरू होने पर सामान्य तरीका कुछ वैश्विक चीज़ों (अक्सर एक विशिष्ट खाली फ़ाइल) के लिए परीक्षण करना होता है। यदि यह मौजूद है, तो कार्य पहले से ही चल रहा है। यदि नहीं, तो वैश्विक चीज़ों को सेट करें, अपना सामान रखें, जब कार्य पूरा हो जाए तो वैश्विक चीज़ को परेशान न करें।

यह समस्या है अगर कार्य वैश्विक चीज को परेशान किए बिना विफल हो जाता है। आप कंप्यूटर स्टार्टअप रूटीन में इसे हमेशा अनसेट कर सकते हैं क्योंकि आपके द्वारा पुनरारंभ किए जाने पर कार्य नहीं चल सकता है। बेहतर यह है कि एक वैश्विक चीज़ को खोजा जाए जो कार्य समाप्त होने पर अपने आप चली जाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.