작업 스케줄러 유휴 작업이 올바른 시간 창에 트리거되지 않음

작업 스케줄러 유휴 작업이 올바른 시간 창에 트리거되지 않음

내 Windows 10 컴퓨터에서는 아래 작업 스케줄러 작업을 만들고 유휴 상태일 때 트리거 시간을 1분으로 설정했습니다. 트리거가 발생하는지 확인하고 수동으로 시간을 측정했으며 1분이 아니라 키보드나 마우스 동작이 없을 때 항상 4분 후에 트리거됩니다. 수동으로 5번 이상 시간을 측정했는데 항상 1분이 아닌 4분 후에 실행됩니다. 설명이 있나요? 4분이 아닌 1분의 유휴 시간 후에 어떻게 실행할 수 있나요? 또한 여기에 설명된 대로 Windows 7에서는 동일한 작업이 전혀 실행되지 않습니다.https://superuser.com/questions/1568707/task-scheduler-on-idle-task-not-triggered-windows-7

Microsoft 문서에서 확인했습니다.https://docs.microsoft.com/en-us/windows/win32/taskschd/task-idle-conditions4분 정도라고 하는데 이해도 못하고 관련이 있는지 없는지 모르겠다고요? 내 Windows 7 컴퓨터에서는 왜 전혀 작동하지 않는지.

여기에 이미지 설명을 입력하세요

다음은 내 예약된 작업이 작업 스케줄러에 표시되는 방식입니다.

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

또한 내 작업의 XML은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2019-11-20T15:43:06.6081219</Date>
    <Author>MyPC\MyUser</Author>
    <URI>\MyAppIdleTask</URI>
  </RegistrationInfo>
  <Triggers>
    <IdleTrigger>
      <Enabled>true</Enabled>
    </IdleTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-21-1004336348-1177238915-682003330-385281</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <Duration>PT1M</Duration>
      <WaitTimeout>PT0S</WaitTimeout>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>true</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\MyWinFormApp\MyWinForm.exe</Command>
    </Exec>
  </Actions>
</Task>

답변1

Microsoft는 기본적으로 Windows에 다음과 같이 프로그래밍했습니다. 4분 동안 사용자 입력이 생성되지 않으면 컴퓨터는 유휴 상태로 간주됩니다.

이것이 의미하는 바는 Windows가 시스템이 유휴 상태임을 감지하기 시작하지만 4분 동안 이를 무시한다는 것입니다. 정확한 이유는 알 수 없으나 아마도 최적화 이유와 불만사항이 있을 수 있습니다. 4분 후 시스템이 유휴 상태가 되면 OS는 다음을 알립니다. 시스템이 이제 4분 동안 유휴 상태이며 계속해서 계산됩니다...

작업 스케줄러는 메시지를 받고 1분 동안 유휴 상태로 설정된 작업을 보고 다음과 같이 생각합니다. 아, 3분 전에 시작했어야 했습니다. 이제 시작하겠습니다. Windows 7에서는 이전 3분을 신경 쓰지 않습니다.

이는 2가지 옵션을 제공합니다.

  1. 항상 4분씩 지연된다는 점을 인정하세요.
  2. 작업 스케줄러를 사용하지 마세요. 대신 활동을 측정하고 작업 시작을 직접 수행하는 프로그램이나 스크립트를 만드십시오. 이렇게 하면 시스템의 오버헤드가 증가하고 잘못 코딩하면 성능이 저하될 수 있습니다.

제가 추천하는 것은 옵션 1을 선택하는 것입니다. 4분 정도 지연된다는 점만 인정하세요. 어쨌든 첫 질문은 30분이었습니다.

관련 정보