Aynı görev zaten çalışıyorsa zamanlanmış bir görevin çalışmasını nasıl önleyebilirim?


11

Bir klasörde yeni dosyalar olup olmadığını kontrol etmek için bir php betiği yazdım ve yeni dosyalar varsa bunları bir sunucuya yükleyin. Bu dosyalar oldukça büyük olabilir. Bu komut dosyasını sık sık çalıştırmak istiyorum-diyelim her 5 dakikada bir-zamanlanmış bir görev olarak dosyaları mümkün olan en kısa sürede sunucuya taşınması. Komut dosyası zaten bir dosyayı yüklemeye çalıştığında, ikinci örnek zaten sunucuya yüklenen dosyanın üzerine yazacağından korktuğumdan, tekrar çalıştırılmasını istemiyorum.

Komut dosyası zaten çalışmadığı sürece komut dosyasını zamanlanmış görev olarak nasıl çalıştırabilirim?

Yanıtlar:


21

Görevi yalnızca XP "Zamanlanmış Görevler" sisteminde "Tekrarla" olarak ayarladığınızı varsayarsanız, başka bir işlem yapmanız gerekmez. Zamanlanmış Görevler zaten çalışıyorsa bir görevi "tekrarlamaz".

Bu varsayılanı geçersiz kılmak istiyorsanız, görev zamanlayıcının yeni bir taneye başlamadan önce son örneği öldürmesine neden olması için "Görev hala çalışıyorsa, şu anda durdur" kutusunu işaretleyebilirsiniz (muhtemelen istemiyorum).


2

Bunu yapmanın yolu, görevi gece yarısından kısa bir süre sonra günde bir kez başlayan ve sonraki gece yarısına kadar çalışan bir toplu iş dosyasından çalıştırmaktır. Bunun avantajı, tek bir komut dosyası olduğundan, ikinci bir örneği çalıştıramamanızdır. Ben dezavantajı her komuttan sonra belirli bir süre beklemek çünkü komut dosyası tam olarak ne sıklıkta tahmin olabilir varsayalım. Her neyse, senaryonuz ilgilenirse şöyle görünür:

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

JR


1

Windows görev zamanlayıcısında, görev yeniden başladığında görev zaten çalışıyorsa ne yapılacağı için bir onay kutusu (veya seçenekler) vardır. Paralel olarak başlamayacak veya çalışmayacak şekilde ayarlayabilirsiniz


1
XP görev zamanlayıcısında bu ayar nerede? Aynı görevi birden çok kez paralel olarak yürütmek için XP zamanlayıcı almak için herhangi bir yol bulamıyorum.
Evan Anderson

Vista. Cevabımı girdikten sonra windows-xp etiketini fark ettim.
Kevin Kuphal

0

Genel yol, görev başladığında bazı küresel şeyleri (genellikle belirli bir boş dosya) test etmektir. Varsa, görev zaten çalışıyor demektir. Değilse, küresel şeyleri ayarlayın, eşyalarınızı yapın, görev tamamlandığında küresel şeyleri kaldırın.

Görev, küresel şey ayarını kaldırmadan başarısız olursa, bu sorunlara sahiptir. Bilgisayar yeniden başlatma işleminde her zaman ayarını kaldırmak isteyebilirsiniz, çünkü yeniden başlattıysanız görev çalıştırılamaz. Daha iyisi, görev sona erdiğinde otomatik olarak kaybolan küresel bir şey bulmaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.