PC를 정해진 시각에 깨우고 재우는 자동화

오전 9시에 돌도록 걸어둔 작업 스케줄러 작업이 며칠째 조용합니다. 로그 폴더는 비어 있고, 에러도 없고, 작업 이력에는 아무것도 남지 않았습니다. 원인은 허무할 만큼 단순합니다 — 그 시각에 PC가 켜져 있지 않았습니다. 이럴 때 필요한 게 컴퓨터 자동 켜기와 절전 예약입니다. 매일 아침 손으로 PC를 켜고 스크립트를 실행하는 데 2분씩 쓴다면 한 달이면 한 시간이고, 깜빡한 날은 그날 데이터가 통째로 비어버립니다. 이번 글에서는 윈도우 기본 기능만으로 정해진 시각에 PC를 깨워 작업을 돌리고, 끝나면 다시 재우는 방법을 정리합니다.

먼저 구분할 것: 절전, 최대 절전, 종료는 완전히 다릅니다

여기서 대부분의 시도가 어긋납니다. 작업 스케줄러의 절전 해제 기능은 잠들어 있는 PC만 깨울 수 있고, 꺼진 PC는 켤 수 없습니다. 내 PC가 어느 상태로 들어가는지 먼저 확인해야 합니다.

상태powercfg /a 표기작업 스케줄러가 깨울 수 있나복귀 속도
절전대기 모드(S3) 또는 대기 모드(S0 저전력 유휴)가능수 초
최대 절전최대 절전 모드가능15~30초
종료해당 없음불가 — BIOS 알람이나 WOL 필요부팅 시간
빠른 시작 후 종료해당 없음불가 (종료로 취급)부팅 시간

즉 “PC를 꺼두고 아침에 자동으로 켜지게” 하려면 윈도우 설정만으로는 안 됩니다. 종료 대신 절전이나 최대 절전으로 재우는 쪽으로 설계를 바꾸는 편이 훨씬 간단합니다. 꼭 꺼둬야 하는 사정이 있다면 뒤쪽 BIOS 항목을 보세요.

시작 전에 현재 상태부터 확인합니다. 명령 프롬프트나 PowerShell을 관리자 권한으로 열고 실행하세요.

:: 이 PC가 지원하는 절전 상태 확인
powercfg /a

:: 절전 관련 설정 전체 보기. 항목 이름과 GUID가 나란히 출력됩니다
powercfg /query SCHEME_CURRENT SUB_SLEEP

:: 지금 걸려 있는 절전 해제 타이머 목록
powercfg /waketimers

1단계 — 절전 해제 타이머를 허용한다

작업에 절전 해제 옵션을 붙여도, 전원 관리 옵션에서 절전 해제 타이머 자체가 막혀 있으면 아무 일도 일어나지 않습니다. 그리고 이게 막혀 있는 경우가 생각보다 많습니다. 특히 노트북은 배터리 상태 기본값이 중요한 절전 해제 타이머만이라, 작업 스케줄러가 건 타이머는 “중요하지 않은” 것으로 분류돼 무시됩니다.

GUI로 하려면 제어판 > 전원 옵션 > 설정 변경 > 고급 전원 관리 옵션 설정 변경 > 절전 > 절전 해제 타이머 허용을 사용으로 바꿉니다. 명령으로 한 번에 처리하려면 이렇게 씁니다.

:: 절전 해제 타이머 허용 — 전원(AC) 연결 상태, 값 1 = 사용
powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d 1

:: 배터리(DC) 상태. 노트북은 기본값이 2(중요한 타이머만)라 여기서 막힙니다
powercfg /setdcvalueindex SCHEME_CURRENT SUB_SLEEP bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d 1

:: 변경한 값을 현재 전원 관리 옵션에 적용
powercfg /setactive SCHEME_CURRENT

:: 값이 0=사용 안 함, 1=사용, 2=중요한 절전 해제 타이머만

GUID를 그대로 복사해 쓰기가 불안하면, 앞서 실행한 powercfg /query SCHEME_CURRENT SUB_SLEEP 출력에서 “절전 해제 타이머 허용” 항목을 찾아 그 아래 적힌 GUID를 쓰면 됩니다. 내 PC에서 직접 확인한 값이라 틀릴 일이 없습니다.

2단계 — 작업에 “절전 모드 해제”를 붙인다

작업 스케줄러 GUI에서는 작업 속성의 조건 탭에 있는 작업을 실행하기 위해 절전 모드 해제 체크박스입니다. 문제는 schtasks.exe에 이 옵션이 없다는 점입니다. 명령줄로 작업을 만들면서 절전 해제까지 켜려면 XML을 직접 import하거나, PowerShell의 ScheduledTasks 모듈을 쓰는 수밖에 없습니다. 후자가 훨씬 읽기 쉽습니다.

# 매일 08:55에 PC를 깨우고 스크립트를 실행하는 작업
$action = New-ScheduledTaskAction -Execute 'powershell.exe' `
  -Argument '-NoProfile -ExecutionPolicy Bypass -File "D:\scripts\daily.ps1"'

$trigger = New-ScheduledTaskTrigger -Daily -At '08:55'

# -WakeToRun 이 핵심입니다. GUI의 "작업을 실행하기 위해 절전 모드 해제"와 같은 옵션입니다
$settings = New-ScheduledTaskSettingsSet -WakeToRun `
  -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable

Register-ScheduledTask -TaskName 'daily-wake-run' `
  -Action $action -Trigger $trigger -Settings $settings `
  -User $env:USERNAME -RunLevel Highest -Force

작업 시각을 실제 필요 시각보다 5분쯤 앞으로 잡은 이유가 있습니다. 최대 절전에서 복귀하면 디스크와 네트워크가 안정되기까지 시간이 걸리고, 이때 네트워크를 쓰는 스크립트는 연결 실패로 죽습니다. 깨우는 작업과 실제 일을 하는 작업을 나누고 사이에 여유를 두는 편이 안전합니다.

위 예시는 로그온한 사용자로 실행되기 때문에, 잠들기 전 로그온 상태였다면 문제없이 동작합니다. 로그오프 상태에서도 돌려야 한다면 -User 'SYSTEM'으로 등록하세요. 비밀번호 없이 등록되고 백그라운드로 실행됩니다.

3단계 — 정해진 시각에 다시 재운다

깨우는 것보다 재우는 쪽이 의외로 함정이 많습니다. 윈도우에는 “지금 절전”을 뜻하는 깔끔한 기본 명령이 없고, 널리 쓰이는 rundll32 명령은 최대 절전 모드가 켜져 있으면 절전이 아니라 최대 절전으로 들어갑니다. 인수를 0,1,0으로 바꿔도 마찬가지입니다. 실제 동작을 결정하는 건 인수가 아니라 최대 절전 모드가 켜져 있는지 여부입니다.

:: 최대 절전 모드가 켜져 있으면 이 명령은 절전이 아니라 최대 절전으로 갑니다
rundll32.exe powrprof.dll,SetSuspendState 0,1,0

:: 그래서 "진짜 절전"을 원하면 최대 절전을 끈 뒤에 위 명령을 씁니다
powercfg /hibernate off

:: 반대로 확실하게 최대 절전으로 보내려면
shutdown /h

둘 중 어느 쪽이든 절전 해제 타이머는 동작하므로, 목적이 “정해진 시각에 다시 깨어나기”라면 굳이 구분하지 않아도 됩니다. 복귀 속도가 중요하면 최대 절전을 끄고 절전을 쓰고, 정전이나 배터리 소진에도 작업 상태를 지켜야 하면 최대 절전을 쓰세요. 절전 상태를 확실히 제어하고 싶다면 마이크로소프트 Sysinternals의 PsShutdown을 쓰는 방법도 있습니다.

재우는 작업도 같은 방식으로 등록합니다.

# 매일 23:30에 PC를 재우는 작업
$action = New-ScheduledTaskAction -Execute 'rundll32.exe' `
  -Argument 'powrprof.dll,SetSuspendState 0,1,0'

$trigger = New-ScheduledTaskTrigger -Daily -At '23:30'
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable

Register-ScheduledTask -TaskName 'nightly-sleep' `
  -Action $action -Trigger $trigger -Settings $settings -Force

깨어나자마자 다시 잠들어 버릴 때

여기서 한 번 더 막힙니다. 타이머로 깨어난 PC는 사람이 만진 게 아니기 때문에, 윈도우가 이를 무인 상태로 보고 기본 2분 뒤에 다시 잠재웁니다. 5분짜리 스크립트를 돌리면 중간에 끊기고, 로그는 절반만 남습니다. 에러 메시지가 남지 않아 원인을 찾기가 특히 까다로운 증상입니다.

이 값은 자동 절전 시간 제한이라는 항목인데, 전원 옵션 창에 기본적으로 보이지 않습니다. 먼저 숨김을 해제한 뒤 값을 늘립니다.

:: 이 항목은 기본적으로 전원 옵션 창에 숨어 있습니다. 먼저 노출시킵니다
powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 -ATTRIB_HIDE

:: 자동 절전 시간 제한을 600초(10분)로 늘립니다
powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 600
powercfg /setactive SCHEME_CURRENT

:: 적용됐는지 확인 (항목 이름으로 찾으세요)
powercfg /query SCHEME_CURRENT SUB_SLEEP

작업이 끝난 뒤 스크립트 마지막 줄에서 직접 절전 명령을 실행하는 방식도 좋습니다. 시간을 넉넉히 잡아두고 스스로 재우게 하면, 작업이 예상보다 오래 걸려도 잘리지 않습니다.

완전히 꺼진 PC를 켜야 한다면

종료 상태에서 켜는 건 윈도우의 영역이 아니라 메인보드의 영역입니다. 방법은 두 가지입니다.

  1. BIOS/UEFI의 RTC 알람 — 제조사마다 이름이 다릅니다. RTC Alarm, Wake on RTC, Resume by Alarm, 알람 시 전원 켜기 등으로 표기되며 보통 전원 관리(Power Management) 항목 안에 있습니다. 시각을 지정하면 그 시각에 전원이 들어옵니다.
  2. WOL(Wake-on-LAN) — 같은 네트워크의 다른 기기에서 매직 패킷을 보내 켜는 방식입니다. 깨울 시각을 바꾸기 쉽고 여러 대를 관리할 때 유리하지만, 항상 켜져 있는 기기(라즈베리파이, NAS, 공유기)가 한 대 필요합니다.

둘 다 BIOS에서 ErP Ready나 Deep Sleep이 켜져 있으면 동작하지 않습니다. 대기 전력을 최소화하는 설정이라, 켜져 있으면 전원이 꺼진 상태에서 메인보드가 알람도 네트워크도 감시하지 않습니다. RTC나 WOL을 쓰려면 이 항목을 꺼야 합니다.

제대로 깨웠는지 확인하는 법

설정을 마쳤으면 실제로 확인해야 합니다. 며칠 지나서 “왜 또 안 돌았지”를 되풀이하는 게 제일 아깝습니다. 먼저 재우고 몇 분 뒤에 깨어나는 짧은 테스트 작업을 만들어 돌려보고, 다음 명령으로 결과를 봅니다.

:: 마지막으로 무엇이 PC를 깨웠는지
powercfg /lastwake

:: 예약된 절전 해제 타이머. 작업 스케줄러 작업 이름이 그대로 나옵니다
powercfg /waketimers

:: 절전 해제를 허용한 장치 목록 (마우스 때문에 깨는지 확인할 때)
powercfg -devicequery wake_armed

powercfg /lastwake가 보여주는 원인이 내가 만든 작업 이름이면 성공입니다. 여기에 마우스나 네트워크 어댑터가 찍히면 타이머가 아니라 다른 요인으로 깨어난 것이라 아직 설정이 안 된 상태입니다. 반대로 /waketimers에 아무것도 없다면 1단계에서 타이머가 여전히 막혀 있거나, 작업에 절전 해제 옵션이 안 붙은 것입니다.

이력을 한번에 보려면 이벤트 로그가 편합니다.

# 절전 해제 기록을 이벤트 로그에서 확인 (최근 5건)
Get-WinEvent -FilterHashtable @{
  LogName      = 'System'
  ProviderName = 'Microsoft-Windows-Power-Troubleshooter'
  Id           = 1
} -MaxEvents 5 | Select-Object TimeCreated, Message

주의할 점

  • 빠른 시작은 종료입니다. 윈도우 10·11의 기본값인 빠른 시작을 켜둔 채 종료하면 절전 해제 타이머가 동작하지 않습니다. 자동으로 깨어나게 하려면 종료 대신 절전이나 최대 절전을 쓰세요.
  • 노트북은 배터리 상태를 따로 열어야 합니다. AC만 허용해두면 전원 케이블을 뽑은 날에는 조용히 건너뜁니다. 실패가 눈에 안 띄는 유형이라 더 주의해야 합니다.
  • 제조사 전원 관리 유틸리티가 설정을 되돌릴 수 있습니다. 노트북에 딸려 오는 전원 관리 프로그램이나 회사 PC의 그룹 정책이 powercfg로 바꾼 값을 덮어쓰는 경우가 있습니다. 설정 후 며칠 뒤에 /query로 다시 확인해 보세요.
  • 깨어난 직후 화면은 잠금 상태입니다. 콘솔에서 돌아가는 스크립트는 문제없지만, 화면을 실제로 조작하는 GUI 자동화는 잠금 화면에서 실패합니다. 브라우저 자동화라면 헤드리스 모드로 돌리는 편이 안전합니다.
  • 작업이 끝나면 확실히 재우세요. 깨우기만 걸어두면 그날 이후로 PC가 계속 켜져 있게 됩니다. 재우는 작업을 짝으로 등록하거나 스크립트 마지막에 절전 명령을 넣어 두세요.

마무리

가장 작은 첫걸음은 지금 powercfg /waketimers 한 줄을 실행해 보는 것입니다. 아무것도 안 나온다면 지금까지 걸어둔 예약 작업 중 PC를 깨울 수 있는 건 하나도 없었다는 뜻입니다. 거기서 시작해 절전 해제 타이머를 허용하고, 기존 작업 하나에 -WakeToRun을 붙여 하루만 돌려보세요. 아침에 로그 파일이 생겨 있는 걸 확인하는 순간이 생각보다 개운합니다.

다음 글에서는 이렇게 자동으로 돌기 시작한 스크립트의 실행 로그를 날짜별로 남기고, 오래된 파일은 알아서 정리되게 만드는 방법을 다룹니다.