Bagaimana saya bisa mencegah tugas terjadwal berjalan jika tugas yang sama sudah berjalan?

11

Saya telah menulis skrip php untuk memeriksa apakah ada file baru di folder dan, jika ada file baru, unggah ke server. File-file ini bisa sangat besar. Saya ingin menjalankan skrip ini secara rutin - katakanlah setiap 5 menit - sebagai tugas terjadwal sehingga file-file dipindahkan ke server secepat mungkin. Namun, begitu skrip sudah mencoba mengunggah file, saya tidak ingin itu dijalankan lagi, karena saya khawatir contoh kedua akan menimpa file yang sudah diunggah ke server.

Bagaimana saya bisa menjalankan skrip sebagai tugas terjadwal kecuali skrip sudah berjalan?

Oren Hizkiya
sumber

Jawaban:

21

Dengan asumsi Anda hanya mengatur tugas untuk "Ulangi" di sistem XP "Tugas Terjadwal", tidak ada tindakan lebih lanjut pada bagian Anda diperlukan. Tugas Terjadwal tidak akan "Ulangi" tugas jika sudah berjalan.

Jika Anda ingin menimpa default itu, Anda dapat mencentang kotak "Jika tugas masih berjalan, hentikan saat ini" untuk menyebabkan penjadwal tugas untuk membunuh contoh terakhir sebelum memulai yang baru (meskipun sepertinya Anda mungkin tidak ingin itu).

Evan Anderson
sumber
2

Cara saya melakukan ini adalah menjalankan tugas dari file batch yang dimulai sekali sehari tak lama setelah tengah malam dan berjalan hingga tengah malam berikutnya. Kelebihannya adalah karena ini adalah skrip tunggal, Anda tidak dapat menjalankan instance kedua. Saya kira kerugiannya adalah Anda dapat memprediksi dengan tepat seberapa sering skrip berjalan karena akan menunggu waktu yang ditentukan setelah setiap kali dijalankan. Bagaimanapun, jika Anda tertarik skrip saya terlihat seperti:

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

John Rennie
sumber
1

Di windows task scheduler terdapat kotak centang (atau opsi) untuk apa yang harus dilakukan jika tugas sudah berjalan ketika tugas dimulai lagi. Anda dapat mengaturnya agar tidak memulai atau menjalankan secara paralel

Kevin Kuphal
sumber
1
Di mana pengaturan itu di penjadwal tugas XP? Saya tidak menemukan cara untuk mendapatkan scheduler XP untuk menjalankan tugas yang sama beberapa kali secara paralel.
Evan Anderson
Vista. Saya memperhatikan tag windows-xp setelah saya memasukkan jawaban saya.
Kevin Kuphal
0

Cara yang biasa adalah dengan menguji beberapa benda global (seringkali file kosong tertentu) ketika tugas dimulai. Jika ada, tugas sudah berjalan. Jika tidak, atur thingy global, lakukan tugas Anda, batalkan haly global saat tugas selesai.

Ini memiliki masalah jika tugas gagal tanpa membuka kunci global. Anda mungkin ingin selalu menghapusnya dalam rutinitas startup komputer karena tugas tersebut tidak dapat berjalan jika Anda telah memulai kembali. Lebih baik adalah menemukan benda global yang hilang secara otomatis ketika tugas berakhir.


sumber