동일한 작업이 이미 실행중인 경우 예약 된 작업이 실행되지 않도록하려면 어떻게해야합니까?


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 스케줄러가 동일한 작업을 여러 번 병렬로 실행할 수있는 방법을 찾지 못했습니다.
Evan Anderson

추억. 답변을 입력 한 후 windows-xp 태그를 발견했습니다.
케빈

0

일반적인 방법은 작업이 시작될 때 일부 전역 항목 (종종 빈 파일)을 테스트하는 것입니다. 존재하는 경우 작업이 이미 실행 중입니다. 그렇지 않은 경우 전역 항목을 설정하고 작업을 수행하고 작업이 완료되면 전역 항목을 설정 해제하십시오.

전역 항목을 설정 해제하지 않고 작업이 실패하면 문제가 있습니다. 컴퓨터를 다시 시작하면 작업을 실행할 수 없으므로 컴퓨터 시작 루틴에서 항상 설정을 해제 할 수 있습니다. 작업이 끝나면 자동으로 사라지는 전역 항목을 찾는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.