Як я можу запобігти виконанню запланованого завдання, якщо те саме завдання вже виконується?


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

JR


1

У планувальнику завдань Windows є прапорець (або параметри), що робити, якщо завдання вже запущено, коли завдання запускається заново. Ви можете налаштувати його не запускатись та не працювати паралельно


1
Де це налаштування в планувальнику завдань XP? Я не знаходжу жодного способу змусити планувальник XP виконувати одне і те ж завдання кілька разів паралельно.
Еван Андерсон

Віста. Я помітив тег windows-xp після введення своєї відповіді.
Кевін Куфал

0

Звичайний спосіб - це перевірити наявність глобального речей (часто конкретного порожнього файлу), коли завдання починається. Якщо воно існує, завдання вже запущене. Якщо ні, встановіть глобальну штучку, зробіть свої речі, скасуйте глобальні речі, коли завдання виконано.

У цьому виникають проблеми, якщо завдання не вдається, не усуваючи глобальну проблему. Можливо, ви завжди хочете зняти його з режиму запуску комп'ютера, оскільки завдання не може бути запущене, якщо ви перезапустили. Краще - знайти глобальну річ, яка автоматично відходить, коли завдання закінчується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.