2009-08-26 21 views
21

Pracuję z Windows 7 i mam aplikację, która zwraca zero (0x0) po pomyślnym i jeden (0x1) w sytuacjach błędu.W jaki sposób program Windows Task Scheduler w Win7 rozpoznaje nieudane zadanie?

Zaplanowałem tę aplikację przy użyciu Harmonogramu zadań systemu Windows. Sprawdziłem pola opcji "Jeśli zadanie nie powiedzie się, uruchom ponownie" i "Próba ponownego uruchomienia do:".

Pomyślałem, że niezerowy kod powrotu z aplikacji wystarczy, aby uruchomić zadanie, które ma zostać zrestartowane po podanym okresie. Ale nic się nie dzieje.

Wszelkie pomysły, co może być problemem? Próbowałem google, ale nie znalazłem nic istotnego.

Odpowiedz

6

Doświadczyłem tego samego problemu na Windows Task Scheduler Windows 2008 serwera. Akcja powrócić non kod zerowy ale harmonogram rozważyć zadanie zakończone:

Task Scheduler successfully completed task "\SET Tasks\Scheduled task [Backup SET Server]" , instance "{...}" , action "C:\Windows\SYSTEM32\cmd.exe" with return code 1. 

Znalazłem w sieci tylko jedna odpowiedź:

Windows Task Scheduler nie zanotujkod zakończenia lub dowolne inne wartości po zakończeniu zadania. Ty musi obsługiwać każdy błąd przetwarzania w ramach własnego skryptu lub programu.

... w tym dokumencie: www.onlinetoolworks.com/docs/winTaskSched.doc

Więc myślę teraz, że jedynym sposobem na obejście tego problemu może być użycie zadanie wyzwalanie zdarzenia. Prowadzę dochodzenie.

Pozdrawiam,

Olivier.

+0

Nie udało mi się sprawić, by działał z wyzwalaniem zadań w przypadku zdarzenia. – Olivier

+0

Zgłosiłem sugestię do MS Feedback Hub [Task Scheduler systemu Windows nie bada kodu wyjścia] (http://aka.ms/a5p0w2). Możesz na nią głosować (link działa tylko na Win10) –

3

Można,

  1. aktywować historię Schedule (jeśli nie już)
  2. w historii "Akcja zakończona" right click „Przydzielony zadanie do tego wydarzenia ..."
  3. Ustaw niestandardowy filtr tak:

    * [System [(EventID = 201)]] i * [EVENTDATA [Dane [@ name = 'ResultCode'] = '1']]

Ciesz

Tilo

wykorzystywane na Win 2008 R2 (Exchange jako serwer e-mail)

+1

Witam Tilo, zmagam się z tym samym problemem i wypróbowałem twoją niestandardową technikę filtrowania, ale wydarzenie wciąż trwa. Potrzebuję strzelać tylko kilka razy i tylko kilka razy. Czy mógłbyś nieco rozwinąć proponowane rozwiązanie? – Johannes

10

utworzyć nowe zadanie i zapytanie niestandardowych zdarzeń tak:

<QueryList> 
    <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational"> 
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">*[System[EventID=201]] and *[EventData[Data[@Name='ResultCode']!='0']] and *[EventData[Data[@Name='TaskName']='\YOUR TASK NAME HERE']]</Select> 
    </Query> 
</QueryList> 

skonfigurować ustawienia wyzwalania wyprzedza opóźnić zadanie na czas jak 15 minut.

skonfigurować działanie nowego zadania, aby uruchomić program:

Program/skrypt:

schtasks 

Dodaj argumenty:

/Run /TN "\YOUR TASK NAME HERE" 

Pozwoli to zaplanować oryginał Zadanie zostanie uruchomione ponownie po 15 minutach od zarejestrowania niezerowego kodu wyniku w zdarzeniu.

+1

Ważne i działa w systemie Windows 10. Należy zauważyć, że to rozwiązanie jest dodatkowym zaplanowanym zadaniem skonfigurowanym do monitorowania nieudanych wykonań (niezerowych powrotów), więc każdy skrypt jest uruchamiany w pierwotnym zadaniu powinien wysyłać odpowiednie kody powrotu. Pamiętając o tym, że powinieneś ustawić opóźnienie co najmniej o jedną minutę i powinieneś zaimplementować zabezpieczenie przed awarią, aby zapobiec ponownemu uruchomieniu oryginalnego skryptu na dłużej. Wciąż wspaniała odpowiedź, kudos. – Lewis

+1

Czekaj, czy to tylko ustawienie niestandardowego wyzwalacza, aby ponownie uruchomić zadanie na niezerowym kodzie wyjścia? – jpmc26

Powiązane problemy