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

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

폴더에 새 파일이 있는지 확인하고 새 파일이 있으면 서버에 업로드하는 PHP 스크립트를 작성했습니다. 이러한 파일은 상당히 클 수 있습니다. 나는 이 스크립트를 예약된 작업으로 자주(예를 들어 5분마다) 실행하여 파일이 가능한 한 빨리 서버로 이동되기를 원합니다. 그러나 스크립트가 이미 파일 업로드를 시도하면 두 번째 인스턴스가 이미 서버에 업로드 중인 파일을 덮어쓸까 봐 다시 실행하고 싶지 않습니다.

스크립트가 이미 실행되고 있지 않은 경우 스크립트를 예약된 작업으로 어떻게 실행할 수 있나요?

답변1

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

답변3

Windows 작업 스케줄러에는 작업이 다시 시작될 때 작업이 이미 실행 중인 경우 수행할 작업에 대한 확인란(또는 옵션)이 있습니다. 병렬로 시작하거나 실행하지 않도록 설정할 수 있습니다.

답변4

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

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

관련 정보