영업: 1-800-867-1380

시작 작업에 대한 유용한 정보

업데이트 날짜: 2013년 11월

시작 작업은 전역 특성을 설정함

IIS가 완전히 시작되고 구성되기 전에 시작 작업이 실행되기 때문에 시작 작업은 사이트, 역할 또는 인스턴스 특성을 구성하는 데 적합하지 않습니다. 시작 작업은 전역 특성을 구성하는 데 더 적합합니다.

사이트, 역할 및 인스턴스 관련 특성은 Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart 메서드에서 설정되어야 합니다.

항상 시작 작업 기록

Visual Studio에서는 배치 파일을 단계별로 실행하는 디버거를 제공하지 않으므로 배치 파일의 작업에 대한 데이터를 가능한 한 많이 얻는 것이 좋습니다. 배치 파일의 출력인 stdoutstderr을 둘 다 기록하면 배치 파일을 디버깅하고 수정하려고 할 때 중요한 정보를 얻을 수 있습니다. stdoutstderrTEMP 환경 변수가 가리키는 디렉터리의 StartupLog.txt 파일에 기록하려면 >> "%TEMP%\StartupLog.txt" 2>&1이라는 텍스트를 기록할 특정 줄의 끝에 추가합니다. 예를 들어 %PathToApp1Install% 디렉터리에서 setup.exe를 실행하려면 다음과 같이 추가합니다.

"%PathToApp1Install%\setup.exe" >> "%TEMP%\StartupLog.txt" 2>&1

>> "%TEMP%\StartupLog.txt" 2>&1을 각 줄의 끝에 추가하지 않고 시작 작업의 모든 출력을 기록하려면 두 가지 시작 배치 파일이 필요합니다. 첫 번째 배치 파일은 두 번째 배치 파일의 모든 작업을 기록하기 위해 리디렉션을 사용하여 두 번째 배치 파일을 호출합니다. 이는 적절한 리디렉션이 발생하는 데 필요합니다.

아래에서는 시작 배치 파일의 모든 출력을 리디렉션하는 방법을 보여 줍니다. 이 예제에서 ServerDefinition.csdef 파일은 Startup1.cmd를 호출하는 시작 작업을 만듭니다. Startup1.cmd는 Startup2.cmd를 호출하여 모든 출력을 %TEMP%\StartupLog.txt로 리디렉션합니다.

ServiceDefinition.cmd:

    <Startup>
      <Task commandLine="Startup1.cmd" executionContext="limited" taskType="simple" />
    </Startup>

Startup1.cmd:

REM   Startup1.cmd calls the main startup batch file, Startup2.cmd, redirecting all output 
REM   to the StartupLog.txt log file.

REM   Log the startup date and time.
ECHO Startup1.cmd: >> "%TEMP%\StartupLog.txt" 2>&1
ECHO Current date and time: >> "%TEMP%\StartupLog.txt" 2>&1
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1
ECHO Starting up Startup2.cmd. >> "%TEMP%\StartupLog.txt" 2>&1

REM   Call the Startup2.cmd batch file, redirecting all output to the StartupLog.txt log file.
START /B /WAIT Startup2.cmd >> "%TEMP%\StartupLog.txt" 2>&1

REM   Log the completion of Startup1.cmd.
ECHO Returned to Startup1.cmd. >> "%TEMP%\StartupLog.txt" 2>&1

IF ERRORLEVEL EQU 0 (
   REM   No errors occurred. Exit Startup1.cmd normally.
   EXIT /B 0
) ELSE (
   REM   Log the error.
   ECHO An error occurred. The ERRORLEVEL = %ERRORLEVEL%.  >> "%TEMP%\StartupLog.txt" 2>&1
   EXIT %ERRORLEVEL%
)

Startup2.cmd:

REM   This is the batch file where the startup steps should be performed. Because of the
REM   way Startup2.cmd was called, all commands and their outputs will be stored in the 
REM   StartupLog.txt file in the directory pointed to by the TEMP environment variable.

REM   If an error occurs, the following command will pass the ERRORLEVEL back to the 
REM   calling batch file.
EXIT /B %ERRORLEVEL%

시작 작업에 적합하게 executionContext 설정

시작 작업에 적합하게 권한을 설정해야 합니다. 경우에 따라 시작 작업은 역할이 일반 권한으로 실행되는 동안 승격된 권한으로 실행되어야 합니다.

executionContext 특성은 시작 작업의 권한 수준을 설정합니다. executionContext="limited"를 사용하면 시작 작업이 역할과 동일한 권한 수준을 갖게 됩니다. executionContext="elevated"를 사용하면 시작 작업이 관리자 권한을 갖게 되므로 시작 작업이 역할에 관리자 권한을 부여하지 않고 관리자 작업을 수행할 수 있습니다.

승격된 권한이 필요한 시작 작업의 예로 AppCmd.exe를 사용하여 IIS를 구성하는 시작 작업을 들 수 있습니다. AppCmd.exe를 사용하려면 Task 요소에 executionContext="elevated"가 필요합니다.

다음 예제에서는 시작 작업 ConfigureIISSettings.cmd에 대해 승격된 권한을 설정합니다.

    <Startup>
      <Task commandLine="ConfigureIISSettings.cmd" executionContext="elevated" taskType="simple" />
    </Startup>

적절한 taskType 사용

taskType 특성은 시작 작업이 실행될 방법을 결정합니다. 세 가지 taskType 값으로 simple, backgroundforeground가 있습니다. background 및 foreground 작업은 비동기적으로 시작되고 simple 작업은 한 번에 하나씩 동기적으로 실행됩니다.

simple 시작 작업을 사용하면 작업이 ServiceDefinition.csdef 파일에 나열되는 순서대로 작업이 발생할 순서를 설정할 수 있습니다. simple 작업이 0이 아닌 종료 코드로 끝나는 경우 시작 프로시저가 중지하고 역할이 시작되지 않습니다.

background 시작 작업과 foreground 시작 작업의 차이점은 foreground 작업의 경우 foreground 작업이 끝날 때까지 역할이 실행되도록 유지된다는 것입니다. 이는 또한 foreground 작업의 작동이 중단되는 경우 foreground 작업이 강제로 닫힐 때까지 역할이 재활용되지 않음을 의미합니다. 따라서 foreground 작업의 이러한 기능이 필요하지 않은 경우 background 작업이 비동기 시작 작업에 권장됩니다.

EXIT /B 0을 사용하여 배치 파일 종료

역할은 각 simple 시작 작업의 errorlevel이 0인 경우에만 시작됩니다. errorlevel(종료 코드)을 올바르게 설정하지 않는 프로그램도 있으므로 배치 파일은 EXIT /B 0 명령을 사용하여 종료되어야 합니다.

시작 배치 파일의 끝에 EXIT /B 0이 없는 것은 역할이 시작되지 않는 문제의 흔한 원인이 됩니다.

시작 작업이 두 번 이상 실행될 것으로 예상

모든 역할 재활용에 다시 부팅이 포함되는 것은 아니지만 모든 시작 작업의 실행은 포함됩니다. 즉, 시작 작업은 다시 부팅 사이에서 여러 번 실행될 수 있어야 합니다. 자세한 내용은 여러 번 실행될 수 있는 시작 작업을 작성하기 위한 전략에 나와 있습니다.

로컬 저장소를 사용하여 역할에서 액세스되어야 하는 파일 저장

시작 작업 중에 파일을 복사하거나 만들어 역할에서 액세스할 수 있게 하려는 경우 해당 파일이 로컬 저장소에 배치되어야 합니다. 시작 작업 및 역할을 위한 로컬 저장소를 만들고 사용하는 방법은 시작 중에 로컬 저장소를 사용하여 파일 저장 문서를 참조하십시오.

참고 항목

이 정보가 도움이 되었습니까?
(1500자 남음)
의견을 주셔서 감사합니다.
표시:
© 2014 Microsoft