Windows 작업 스케줄러(Task Scheduler)는 지정된 일정에 따라 작업을 실행할 수 있을 뿐만 아니라, 시스템 로그에 특정 이벤트가 기록될 때 작업을 실행하도록 설정할 수도 있습니다(관련 내용은 "Windows 이벤트 트리거" 문서 참조). 이 글에서는 이전 작업이 완료된 직후 스케줄러 작업을 자동으로 시작하는 방법을 알아보겠습니다. 작업 간의 실행 의존성을 구성하는 절차를 단계별로 살펴보고, 필요에 맞게 응용해 보시기 바랍니다.
실제 사례를 들어보면, 하나의 스크립트가 완료된 후 다른 사용자 계정으로 또 다른 스크립트를 실행해야 하는 상황이 있었습니다. 서로 다른 계정으로 실행해야 하기 때문에 두 동작을 하나의 작업으로 통합할 수는 없었습니다.
Ping 작업이 완료된 후 Pong 작업을 시작해야 한다고 가정해 보겠습니다. 작업이 시작되거나 완료될 때마다 해당 이벤트 정보가 시스템 로그에 기록되며, 여기서는 Ping 작업의 완료 이벤트에 주목하겠습니다.
1단계: 작업 완료 이벤트 확인하기
작업 스케줄러 콘솔(Taskschd.msc)을 열고 Ping 작업을 찾아 선택한 뒤, 하단 패널에서 기록(History) 탭으로 이동합니다. 이 탭에는 해당 작업과 관련된 모든 이벤트 정보가 표시됩니다. 우리가 찾아야 할 것은 작업이 완료된 후 생성되는 이벤트 ID 102(Task completed)입니다.
세부 정보(Detail) 탭을 열고 이벤트의 XML 보기(XML View)를 활성화하면, 필터 생성에 필요한 이벤트의 모든 세부 정보를 확인할 수 있습니다. 특히 다음 항목들이 필요합니다.
- EventID: 102
- Provider-Name: Microsoft-Windows-TaskScheduler
- Channel: Microsoft-Windows-TaskScheduler/Operational
- TaskName: \ping
2단계: Pong 작업에 이벤트 트리거 만들기
Pong 작업의 트리거를 만들 때, 로그에 ID 102 이벤트가 나타나면 작업이 시작되도록 조건을 구성해야 합니다(트리거 유형은 이벤트 발생 시(On an event) 선택). 그런데 여기에 문제가 있습니다. 이벤트 ID 102는 Ping 작업뿐만 아니라 모든 작업이 완료될 때마다 기록된다는 점입니다.
다행히 표준 필터만으로는 이벤트를 정확하게 선택하기 어려운 경우, 더 유연한 조건(사용자 지정(Custom))을 만들 수 있습니다. 새 이벤트 필터(New Event Filter)를 클릭하세요.
3단계: 사용자 지정 이벤트 필터 구성
앞서 XML 보기에서 확인한 데이터를 바탕으로 새 이벤트 필터를 만듭니다.
- 이벤트 로그(Events Logs): Microsoft-Windows-TaskScheduler/Operational
- 이벤트 원본(Event source): TaskScheduler
- 작업 범주(Task category): Task completed
그런 다음 XML 탭으로 이동하면 다음과 같은 기본 필터(XPath)가 표시됩니다.
<QueryList>
<Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
<Select Path="Microsoft-Windows-TaskScheduler/Operational">*[System[Provider[@Name='Microsoft-Windows-TaskScheduler'] and Task = 102]]</Select>
</Query>
</QueryList>
이 XPath 코드를 아래와 같이 수정하여, \ping 작업의 완료 이벤트만 검색하도록 로그를 필터링합니다. 핵심은 EventData 조건을 추가해 작업 이름(TaskName)까지 함께 비교하는 것입니다.
<QueryList>
<Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
<Select Path="Microsoft-Windows-TaskScheduler/Operational">*[System[Provider[@Name='Microsoft-Windows-TaskScheduler'] and (EventID=102)] and EventData[Data[@Name='TaskName']='\ping']]</Select>
</Query>
</QueryList>
4단계: 동작 테스트
트리거 설정이 완료되면 ping 작업을 실행해 보세요. ping 작업이 완료되는 즉시 pong 작업이 자동으로 시작되어야 합니다.
XPath 구문의 의미를 간단히 정리하면 다음과 같습니다.
Provider[@Name='Microsoft-Windows-TaskScheduler']: 이벤트 공급자가 작업 스케줄러인지 확인합니다.EventID=102: 작업 완료 이벤트인지 확인합니다.EventData[Data[@Name='TaskName']='\ping']: 완료된 작업의 이름이 \ping인지 확인합니다.
이 방식을 응용하면 작업 이름, 이벤트 ID 등의 조건을 조합해 다양한 형태의 작업 체인(task chain)을 구성할 수 있습니다. 예를 들어 백업 작업이 끝난 후 리포트 생성 작업을 실행하거나, 여러 단계의 배치 프로세스를 순차적으로 연결하는 자동화 시나리오에 활용할 수 있습니다.