- 공유 링크 만들기
- X
- 이메일
- 기타 앱
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 Windows 작업 스케줄러에서 자주 발생하는 종료 코드 0x1 오류의 원인과 해결 방법을 실무 관점에서 상세히 정리하여, 자동 백업·스크립트·배치 파일이 실패할 때 신속하게 문제를 진단하고 복구할 수 있도록 돕는 것이다.
1. 작업 스케줄러 0x1 오류 의미 이해하기
Windows 작업 스케줄러에서 “작업이 종료 코드 0x1(1)로 완료되었다”라고 표시되면, 이는 작업이 시작되었으나 스크립트 또는 프로그램이 정상 종료되지 않고 오류 코드 1을 반환했다는 의미이다.
이 오류는 작업 스케줄러 자체의 문제라기보다는, 스케줄러가 실행한 배치 파일(.bat, .cmd)·PowerShell 스크립트·실행 파일이 실패했음을 나타내는 경우가 대부분이다.
1-1. 0x0 vs 0x1 종료 코드 차이
- 0x0 : 스크립트·프로그램이 정상적으로 실행을 완료했다는 의미이다.
- 0x1 : 실행 도중 에러가 발생했거나, 경로/권한 문제로 인해 정상 종료하지 못했음을 의미한다.
따라서 0x1 오류를 해결하려면, 단순히 작업 스케줄러 화면만 보는 것이 아니라 실제 실행되는 명령과 환경을 함께 점검해야 한다.
2. 0x1 오류의 대표적인 원인 정리
실무에서 자주 발생하는 원인을 유형별로 정리하면 다음과 같다.
| 원인 유형 | 구체적인 문제 사례 | 주요 증상 |
|---|---|---|
| 경로/파일 문제 | 작업에 등록한 프로그램 또는 스크립트 경로가 잘못되었거나, 공백 포함 경로를 따옴표로 감싸지 않음 | 수동 실행 시 정상이나, 스케줄 실행 시 0x1 반환 |
| 작업 디렉터리 미설정 | "시작 위치(작업 디렉터리)"에 스크립트가 의존하는 폴더를 지정하지 않음 | 상대 경로 사용 스크립트에서 파일을 찾지 못함 |
| 권한/계정 문제 | 로컬 계정 권한 부족, 관리자 권한 필요 스크립트, 네트워크 경로 접근 시 자격 증명 부족 | 수동 실행(관리자) 시 정상, 스케줄러 실행 시 실패 |
| 환경 변수·경로 차이 | 사용자 세션과 서비스 세션의 PATH·환경 변수 차이, 드라이브 매핑 미적용 | 탐색기에서 실행 시 정상, 예약 작업에서만 실패 |
| PowerShell 실행 정책 | 스크립트 실행 정책(ExecutionPolicy) 제한, 스크립트 차단 | PowerShell 스크립트만 0x1 또는 다른 코드로 실패 |
| 스크립트 내부 오류 | 잘못된 명령, 존재하지 않는 파일 참조, 인코딩 문제, 잘못된 인자 | 명령 프롬프트에서 실행해보면 오류 메시지 표시 |
주의 : 작업 스케줄러의 기록에는 “성공적으로 완료되었다”라고 표시되더라도, 종료 코드가 0x1이면 실제로는 스크립트 내부에서 문제가 발생한 것이다. 항상 종료 코드와 스크립트 로그를 함께 확인해야 한다.
3. 기본 점검 순서: 0x1 오류 해결 체크리스트
실무에서 빠르게 진단하기 위한 단계별 점검 순서를 정리한다.
3-1. 1단계 – 동일 명령을 수동으로 실행해 보기
- 작업 스케줄러에서 해당 작업의 동작 → 프로그램/스크립트 및 인수 내용을 확인한다.
- 명령 프롬프트(cmd) 또는 PowerShell을 관리자 권한으로 실행한다.
- 작업 스케줄러에 설정한 명령줄을 그대로 복사해 수동으로 실행한다.
이때 콘솔 화면에 나타나는 오류 메시지를 통해, 파일 경로 오류·권한 부족·문법 오류 등 대부분의 원인을 바로 확인할 수 있다.
3-2. 2단계 – 작업 디렉터리(시작 위치) 설정 확인
많은 배치 파일이 다음과 같이 상대 경로를 사용한다.
copy ".\data\source.txt" ".\backup\source.txt" 이 경우 작업 스케줄러에서 “시작 위치(작업 디렉터리)”를 지정하지 않으면, 기본 실행 위치가 시스템 폴더로 잡혀 상대 경로가 모두 틀어지게 된다.
- 동작 편집 → “시작 위치”에 배치 파일이 있는 폴더 경로를 지정한다.
- 절대 경로를 사용할 수 있으면, 스크립트 자체를 절대 경로로 수정하는 것도 좋다.
3-3. 3단계 – 경로/파일명 공백과 따옴표 확인
Windows 경로에 공백이 포함되어 있을 때, 따옴표로 감싸지 않으면 인수가 분리되어 인식된다.
잘못된 예: C:\Program Files\MyApp\app.exe -arg1
올바른 예:
"C:\Program Files\MyApp\app.exe" -arg1
배치 파일 내부에서도 마찬가지이므로, 다음처럼 항상 전체 경로를 쌍따옴표로 감싸는 습관을 갖는 것이 좋다.
copy "C:\backup source\file.txt" "D:\backup target\file.txt" 3-4. 4단계 – 계정·권한·네트워크 접근 점검
작업 스케줄러는 지정한 계정의 권한으로 동작한다. 다음 사항을 확인한다.
- “사용자 또는 그룹 변경”에서 실제로 작업을 실행해야 하는 계정을 선택했는지 확인한다.
- 관리자 권한이 필요한 작업이면 “가장 높은 권한으로 실행”에 체크한다.
- 네트워크 공유 폴더(
\\서버\공유)에 접근하는 경우, 선택한 계정이 해당 공유에 읽기/쓰기 권한을 가지고 있는지 확인한다. - 도메인 환경일 경우, 로컬 시스템 계정으로는 공유 폴더 접근이 안 되는 경우가 많으므로, 도메인 사용자 계정으로 작업을 등록한다.
주의 : 탐색기에서 수동으로 실행하면 현재 로그인한 사용자 계정 권한으로 동작하지만, 작업 스케줄러는 지정 계정 또는 시스템 계정 권한으로 실행된다. 두 환경의 권한 차이를 항상 의식해야 한다.
3-5. 5단계 – 환경 변수와 드라이브 매핑 확인
로그온한 사용자 세션에서 사용하는 드라이브 문자와 PATH 환경 변수는, 작업 스케줄러 서비스가 사용하는 것과 다를 수 있다.
- 네트워크 드라이브(예:
Z:\)는 보통 작업 스케줄러에서 인식되지 않는다. 대신\\서버\공유형태의 UNC 경로를 사용한다. - 특정 프로그램이 PATH에 의존한다면, 스크립트 안에서
cd로 설치 폴더로 이동하거나, 실행 파일 전체 경로를 명시한다.
4. 배치 파일(.bat, .cmd)에서 0x1 오류 줄이는 패턴
배치 파일을 조금만 구조화하면, 나중에 0x1 오류 원인을 찾기가 훨씬 쉬워진다.
4-1. 명령 실패 시 종료 코드 전달하기
일반적인 패턴은 다음과 같다.
@echo off setlocal
rem 로그 파일 경로 설정
set LOG=C:\logs\backup_%DATE:~0,10%.log
echo [%DATE% %TIME%] 작업 시작 >> "%LOG%"
rem 1단계: 소스 폴더 백업
robocopy "C:\source" "D:\backup" /MIR /R:3 /W:5
if errorlevel 1 (
echo [%DATE% %TIME%] robocopy 실패, errorlevel=%ERRORLEVEL% >> "%LOG%"
exit /b %ERRORLEVEL%
)
rem 2단계: 압축
"C:\Program Files\7-Zip\7z.exe" a "D:\backup\archive.7z" "D:\backup*"
if errorlevel 1 (
echo [%DATE% %TIME%] 압축 실패, errorlevel=%ERRORLEVEL% >> "%LOG%"
exit /b %ERRORLEVEL%
)
echo [%DATE% %TIME%] 작업 정상 완료 >> "%LOG%"
exit /b 0
exit /b 0: 작업이 정상 종료될 때 0 반환이다.exit /b %ERRORLEVEL%: 실패한 명령의 오류 코드를 그대로 작업 스케줄러에 전달한다.
이렇게 작성하면, 작업 스케줄러에서 0x1뿐 아니라 0x2, 0x3 등 명확한 종료 코드를 확인할 수 있어 원인 분석에 유리하다.
4-2. 로그 파일을 남겨서 원인 추적하기
0x1 오류는 스케줄러 화면만 봐서는 원인을 알기 어렵다. 따라서 배치 파일에서 로그 파일 기록을 습관화하면 좋다.
echo [%DATE% %TIME%] <단계 설명> >> "%LOG%" 이런 방식으로 단계별로 기록하면, 나중에 어떤 단계에서 오류가 발생했는지 신속하게 확인할 수 있다.
5. PowerShell 스크립트 작업에서 0x1 오류 해결
PowerShell 스크립트를 작업 스케줄러로 실행할 때는 다음과 같은 추가 고려가 필요하다.
5-1. PowerShell 실행 방식 설정
동작 탭에서 프로그램/스크립트에는 보통 다음과 같이 설정한다.
- 프로그램/스크립트 :
powershell.exe - 인수 추가 예시:
-NoLogo -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\MyTask.ps1" -ExecutionPolicy Bypass 옵션은 해당 실행에 한해 스크립트 실행 정책을 우회하여, 정책 때문에 스크립트가 차단되는 문제를 줄여준다. 보안 정책상 허용되지 않는 환경이라면, 조직 정책에 맞게 적절한 ExecutionPolicy를 사전에 설정해야 한다.
5-2. PowerShell에서 종료 코드 명시하기
PowerShell 스크립트에서도 명시적으로 종료 코드를 반환하는 것이 좋다.
try { # 작업 수행 Backup-Item -Path "C:\Data" -Destination "D:\Backup" exit 0 } catch { # 오류 로그 남기기 "> $($_.Exception.Message)" | Out-File "C:\logs\ps_backup_error.log" -Append -Encoding UTF8 exit 1 } 이렇게 하면 작업 스케줄러에서 0x1 코드가 떴을 때, PowerShell 로그 파일을 바로 열어 상세 오류 메시지를 확인할 수 있다.
6. 작업 스케줄러 설정 항목별 필수 점검 포인트
작업 등록 화면에서 놓치기 쉬운 핵심 설정들을 정리한다.
6-1. 일반 탭
- 사용자 또는 그룹 : 실제 파일·네트워크 접근 권한이 있는 계정으로 설정한다.
- 사용자가 로그온했는지 여부에 관계없이 실행 : 서버 자동 작업이라면 이 옵션을 선택한다.
- 가장 높은 권한으로 실행 : 관리자 권한이 필요한 작업이면 반드시 체크한다.
6-2. 트리거 탭
- 실행 빈도(매일, 로그인 시, 시스템 시작 시 등)를 실제 요구사항에 맞게 설정한다.
- 지나치게 짧은 간격(예: 1분마다)으로 설정하면, 오류 발생 시 로그가 과도하게 쌓이고 분석이 어려워질 수 있다.
6-3. 동작 탭
- 프로그램/스크립트 : 실행 파일 또는 인터프리터(cmd, powershell 등)의 전체 경로를 지정한다.
- 인수 추가 : 스크립트 파일 경로 및 옵션을 넣되, 공백이 있으면 따옴표로 감싼다.
- 시작 위치 : 스크립트 또는 관련 파일이 위치한 폴더를 지정한다.
6-4. 조건/설정 탭
- 노트북 환경에서는 “AC 전원에서만 작업 시작” 옵션 때문에 작업이 실행되지 않는 것처럼 보일 수 있다.
- 오류 발생 시 다시 시도하도록 설정하면 일시적인 오류를 자동으로 복구할 수 있으나, 근본 원인은 반드시 분석해야 한다.
7. 0x1 오류 사례별 해결 예시
7-1. 백업 배치 파일이 0x1로 실패하는 경우
증상: 탐색기에서 더블클릭하면 정상 백업되지만, 새벽 예약 작업으로 실행하면 0x1 오류가 발생하며 로그가 남지 않는다.
해결 과정:
- 배치 파일에 로그 기록 코드를 추가한다.
- 작업 스케줄러에서 “시작 위치”를 배치 파일이 있는 폴더로 지정한다.
- 네트워크 드라이브 경로를
Z:\에서\\서버\공유형태로 변경한다. - 계정을 로컬 시스템에서 도메인 사용자 계정으로 변경하고 권한을 부여한다.
결과적으로 종료 코드가 0x0으로 변경되고, 백업 로그가 정상적으로 쌓이게 된다.
7-2. PowerShell 데이터 수집 스크립트가 0x1로 실패하는 경우
증상: 수동 실행 시 문제 없지만, 스케줄러에서만 0x1 오류가 발생하고 콘솔 창이 잠깐 떴다가 사라진다.
해결 과정:
- 동작 탭에서 인수에
-ExecutionPolicy Bypass와-File "C:\Scripts\Collect.ps1"을 정확히 넣는다. - 스크립트에 try/catch와 로그 기록,
exit 0/1를 추가해 구체적인 오류 메시지를 파일로 남긴다. - “사용자가 로그온했는지 여부에 관계없이 실행” 및 “가장 높은 권한으로 실행”을 설정한다.
이후 로그 파일을 통해 특정 WMI 쿼리에서 권한 부족이 발생한 것을 확인하고, 계정 권한을 보완하여 문제를 해결한다.
8. 0x1 오류 최소화를 위한 실무 팁 정리
- 모든 스크립트는 로그 파일을 남기도록 작성한다.
- 상대 경로 대신 가능하면 절대 경로를 사용한다.
- 네트워크 경로는 드라이브 문자 대신 UNC 경로(
\\서버\공유)를 사용한다. - 작업 스케줄러에 등록하기 전에, 동일 계정으로 명령 프롬프트를 실행해 테스트한다.
- 작업 생성 후 초기에는 실행 로그와 종료 코드를 몇 차례 모니터링해 안정성을 확인한다.
FAQ
Q1. 종료 코드가 0x1이 아니라 0x2, 0x3 등 다른 값이면 의미가 무엇인가?
대부분의 경우 해당 값은 작업 스케줄러가 아니라 실행된 프로그램 또는 스크립트가 반환한 종료 코드이다. 예를 들어 robocopy, 7zip, 자체 개발 프로그램 등은 각자 고유의 반환 코드를 사용한다. 따라서, 해당 프로그램의 공식 문서를 참고하여 각 코드의 의미를 해석해야 한다. 공통적으로 0이 아니면 “어떤 형태의 에러 또는 경고”라는 점은 동일하다.
Q2. 작업 스케줄러에 “성공적으로 완료됨”이라고 나오는데 종료 코드가 0x1이다. 성공인가 실패인가?
작업 스케줄러 UI에서 상태가 “작업 완료”로 표시되더라도, 종료 코드가 0x1이면 실제 작업은 문제가 있었다고 보는 것이 안전하다. 스케줄러는 단지 프로세스가 종료된 사실만 알고, 그 내부 처리는 종료 코드로만 판단한다. 반드시 로그 파일 또는 콘솔 메시지를 통해 상세 오류를 확인해야 한다.
Q3. 작업 스케줄러 기록을 어디에서 더 자세히 확인할 수 있나?
Windows 이벤트 뷰어에서 “응용 프로그램 및 서비스 로그 → Microsoft → Windows → TaskScheduler → Operational” 로그를 활성화하면, 각 작업의 시작·종료·오류에 대한 보다 상세 정보를 확인할 수 있다. 특히 어떤 계정으로 실행되었는지, 어느 단계에서 실패했는지 파악하는 데 도움이 된다.
Q4. “가장 높은 권한으로 실행”을 항상 켜두면 되는가?
관리자 권한이 필요 없는 작업에까지 일괄적으로 높은 권한을 부여하는 것은 보안상 바람직하지 않다. 시스템 변경·드라이버 조작·서비스 제어·레지스트리 수정 등 관리자 권한이 필요한 작업에 한정해 사용하고, 단순 파일 복사·로그 수집 등의 작업은 일반 사용자 권한으로 설정하는 것이 좋다.
Q5. 비밀번호 변경 후 갑자기 0x1 오류가 나기 시작했다.
작업에 지정된 계정의 암호가 변경되면, 작업 스케줄러에 저장된 자격 증명이 더 이상 유효하지 않게 된다. 이 경우 작업 속성의 일반 탭에서 “사용자 또는 그룹” 옆의 암호 입력 부분을 다시 설정해야 한다. 자격 증명이 틀린 경우에도 작업은 시작되지 않거나 곧바로 실패하며, 종료 코드가 0x1 또는 관련 오류 코드로 나타날 수 있다.
추천·관련글
- Resolve Safety Data Sheet (SDS) Information Inconsistencies: Expert Workflow for Compliance and Risk Control
- Industrial Waste Phase Separation Troubleshooting: How to Break Stable Emulsions and Restore Settling
- How to Extend HPLC Column Life: Proven Maintenance, Mobile Phase, and Sample Prep Strategies
- Prevent UV-Vis Absorbance Saturation: Expert Strategies for Accurate Spectrophotometry
- How to Reduce High HPLC Column Backpressure: Proven Troubleshooting and Prevention
- Reduce High UV-Vis Background Absorbance: Proven Fixes and Best Practices