Aufgabenplanung - Einträge im Log durch Batchdatei?
Hi,
meine (kompilierte) Batchdatei wird momentan mit höchsten Berechtigungen als angemeldeter Benutzer ausgeführt.
Dabei erhalte ich im Log (Verlauf) der Aufgabenplanung bei so ziemlich jedem Aufruf (stündlich) eine Warnung (ID 322 "Task Scheduler did not launch task "%1" because instance "%2" of the same task is already running.") und einen Fehler (101 "Task Scheduler failed to start the "%1" task for user "%2". The error value is: %3."), die durch die Batch Datei hervorgerufen werden. Die Beschreibungen für die FehlerIDs hab ich mal aus dem englischsprachigen Technet Artikeln rauskopiert.
Wenn ich das Ganze über die Aufgabenplanung manuell anstoße, läuft das Log ohne die ID-Einträge durch.
Da der Task beim geplanten stündlichen Start eigentlich nicht ein zweites Mal anläuft (es sind auch keine ssh.exe oder rsync.exe Einträge mehr im Taskmanager vorhanden bevor die komplierte .bat Datei startet) frage ich mich, warum die das Log der Aufgabenplanung sich in 90% aller Fälle mit den beiden IDs beschwert. Hat jemand ne Idee, wie man dem Fehler auf die Spur kommen könnte?
Ein Bild des Logverlaufs:
Das Script:
meine (kompilierte) Batchdatei wird momentan mit höchsten Berechtigungen als angemeldeter Benutzer ausgeführt.
Dabei erhalte ich im Log (Verlauf) der Aufgabenplanung bei so ziemlich jedem Aufruf (stündlich) eine Warnung (ID 322 "Task Scheduler did not launch task "%1" because instance "%2" of the same task is already running.") und einen Fehler (101 "Task Scheduler failed to start the "%1" task for user "%2". The error value is: %3."), die durch die Batch Datei hervorgerufen werden. Die Beschreibungen für die FehlerIDs hab ich mal aus dem englischsprachigen Technet Artikeln rauskopiert.
Wenn ich das Ganze über die Aufgabenplanung manuell anstoße, läuft das Log ohne die ID-Einträge durch.
Da der Task beim geplanten stündlichen Start eigentlich nicht ein zweites Mal anläuft (es sind auch keine ssh.exe oder rsync.exe Einträge mehr im Taskmanager vorhanden bevor die komplierte .bat Datei startet) frage ich mich, warum die das Log der Aufgabenplanung sich in 90% aller Fälle mit den beiden IDs beschwert. Hat jemand ne Idee, wie man dem Fehler auf die Spur kommen könnte?
Ein Bild des Logverlaufs:
Das Script:
@ECHO OFF
setlocal enabledelayedexpansion
REM ########################################################
REM ### Declare Variables ##################################
REM ########################################################
REM ### Store Directory Paths ##############################
SET WorkingDrive=%~d0
SET WorkingDir=%~pd0
SET WorkingDir=%WorkingDir:~0,-1%
%WorkingDrive%
CD "%WorkingDir%"
REM ### Store Tool Paths ###################################
SET SnapshotDir=.Snapshots
SET SnapshotCMD=~var_snapshot
SET KeyfilesDir=.Keyfiles
SET ScriptsDir=.Scripts
SET VssDir=.VSS
SET UserDir=Users
SET DriveToBackup=D
SET WinDrive=%SystemDrive:~0,-1%
SET rsync=rsync.exe
REM ### Check if old task is still running #################
tasklist /fi "IMAGENAME eq rsync.exe" | findstr /i /c:"rsync.exe" >NUL 2>NUL
IF %errorlevel%==0 GOTO END
REM ### Check for 32 or 64 Bit OS ##########################
IF EXIST %windir%\SysWoW64\NUL ( SET vShadow=%WorkingDir%\%VssDir%\vshadow_x64.exe ) ELSE ( vShadow=%WorkingDir%\%VssDir%\vshadow_x86.exe )
REM ### Check for OS language ##############################
DIR /A-D %userprofile% | findstr /i /c:"Verzeichnis(se)" >NUL 2>NUL
IF %errorlevel%==0 ( SET ClientLang=de_DE ) ELSE ( SET ClientLang=en_US )
REM ### Add Run As Admin ###################################
SET RegEnvPath=HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
REG QUERY "%RegEnvPath%" /v "%WorkingDir%\%username%.bat" >NUL 2>NUL
IF %errorlevel%==1 (
REG ADD "%RegEnvPath%" /v "%WorkingDir%\%username%.bat" /t REG_SZ /d "RUNASADMIN" /f >NUL 2>NUL
REG ADD "%RegEnvPath%" /v "%WorkingDir%\%username%.exe" /t REG_SZ /d "RUNASADMIN" /f >NUL 2>NUL
)
REM ### Set firewall access rights #########################
netsh advfirewall firewall show rule name="RSync" | findstr /i /c:"Keine Regeln" >NUL 2>NUL
IF %errorlevel%==0 (
netsh advfirewall firewall add rule name="RSync" program="%WorkingDir%\%rsync%" dir=in action=allow protocol=any
netsh advfirewall firewall add rule name="RSync" program="%WorkingDir%\%rsync%" dir=out action=allow protocol=any
)
REM ### Create task ########################################
CHCP 1252 >NUL 2>NUL
SET "ae=ä" & SET "oe=ö" & SET "ue=ü"
CHCP 850 >NUL 2>NUL
schtasks /query | findstr /i /c:"Rsync" >NUL 2>NUL
IF %errorlevel%==1 (
IF %ClientLang%==de_DE ( schtasks /create /tn "Rsync" /tr "%WorkingDir%\%username%.exe" /sc minute /mo 60 /st 08:00:00 /ru "%username%" /f /it /rl h%oe%chste >NUL 2>NUL )
IF %ClientLang%==en_US ( schtasks /create /tn "Rsync" /tr "%WorkingDir%\%username%.exe" /sc minute /mo 60 /st 08:00:00 /ru "%username%" /f /it /rl highest >NUL 2>NUL )
)
REM ### Set access rights on keyfile #######################
icacls "%WorkingDir%\%KeyfilesDir%\%username%\ssh2private_%username%.PPK" /findsid %username% | findstr /i /c:"keine Dateien" >NUL 2>NUL
IF %errorlevel%==0 (
icacls "%WorkingDir%\%KeyfilesDir%\%username%\ssh2private_%username%.PPK" /inheritance:d >NUL 2>NUL
icacls "%WorkingDir%\%KeyfilesDir%\%username%\ssh2private_%username%.PPK" /grant %username%:F >NUL 2>NUL
icacls "%WorkingDir%\%KeyfilesDir%\%username%\ssh2private_%username%.PPK" /grant Administratoren:F >NUL 2>NUL
icacls "%WorkingDir%\%KeyfilesDir%\%username%\ssh2private_%username%.PPK" /remove:g Jeder >NUL 2>NUL
)
REM ### Convert %username% to lowercase ####################
FOR /F "delims=~" %%A IN ('ECHO %username%^> "%temp%\~%username%" ^& DIR /L /B "%temp%\~%username%"') DO (
SET "HiDriveUser=%%A"
DEL /Q "%temp%\~%username%"
)
REM ### Admin Check ########################################
COPY /Y NUL "%windir%\.AdminTest" >NUL 2>NUL
IF %errorlevel%==1 ( GOTO Rsync_AsUser ) ELSE ( SET IsAdmin=True )
REM ### Check and Start ####################################
IF EXIST %SystemDrive%\%SnapshotDir%\%DriveToBackup%\NUL ( GOTO CleanUpOnInitialize_AsAdmin ) ELSE ( GOTO Initialize_AsAdmin )
:CleanUpOnInitialize_AsAdmin
REM ### Clean up on Initialize #############################
CALL "%WorkingDir%\%SnapshotCMD%.cmd"
mountvol %SystemDrive%\%SnapShotDir%\%DriveToBackup% /d
"%vShadow%" -ds=%SHADOW_ID_1%
RMDIR "%SystemDrive%\%SnapShotDir%\%DriveToBackup%" /s /q
:Initialize_AsAdmin
MKDIR "%SystemDrive%\%SnapShotDir%\%DriveToBackup%" >NUL 2>NUL
ATTRIB +h "%SystemDrive%\%SnapShotDir%"
"%vShadow%" -p -nw -script="%WorkingDir%\%SnapshotCMD%.cmd" %DriveToBackup%:
CALL "%WorkingDir%\%SnapshotCMD%.cmd"
REM ### Mounten des Snapshots #############################
"%vShadow%" -el=%SHADOW_ID_1%,%SystemDrive%\%SnapShotDir%\%DriveToBackup%
REM ### RSync highend ######################################
REM ### RSync highend - Upload All #########################
"%WorkingDir%\%rsync%" -v -P -h -rlt -z --chmod=a=rw,Da+x --modify-window=2 --delete --files-from "%ScriptsDir%/%username%/%username%_include.txt" --exclude-from "%ScriptsDir%/%username%/%username%_exclude.txt" -e "ssh -o StrictHostKeyChecking=no -l %HiDriveUser% -i %KeyfilesDir%/%HiDriveUser%/ssh2private_%HiDriveUser%.PPK" "/cygdrive/%WinDrive%/%SnapshotDir%/%DriveToBackup%/" "%HiDriveUser%@rsync.hidrive.strato.com:/users/%HiDriveUser%/"
:CleanUpOnExit_AsAdmin
REM ### Clean up on exit ###################################
mountvol %SystemDrive%\%SnapShotDir%\%DriveToBackup% /d
"%vShadow%" -ds=%SHADOW_ID_1%
DEL "%WorkingDir%\%SnapshotCMD%.cmd"
RMDIR "%SystemDrive%\%SnapShotDir%" /s /q
GOTO END
:Rsync_AsUser
REM ### RSync highend ######################################
REM ### RSync highend - Upload All #########################
"%WorkingDir%\%rsync%" -v -P -h -rlt -z --chmod=a=rw,Da+x --modify-window=2 --delete --files-from "%ScriptsDir%/%username%/%username%_include.txt" --exclude-from "%ScriptsDir%/%username%/%username%_exclude.txt" -e "ssh -o StrictHostKeyChecking=no -l %HiDriveUser% -i %KeyfilesDir%/%HiDriveUser%/ssh2private_%HiDriveUser%.PPK" "/cygdrive/%DriveToBackup%/" "%HiDriveUser%@rsync.hidrive.strato.com:/users/%HiDriveUser%/"
:END
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 162634
Url: https://administrator.de/contentid/162634
Ausgedruckt am: 26.11.2024 um 08:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo @Highend01,
Unter welchem Account führt der Taskplaner dein Script denn aus?
Führe mal folgendes über den Taskplaner aus:
Und schau dir den Inhalt von
Wenn das schon fehlschlägt (also wieder die Fehlermeldung vom Taskplaner), dann liegt dein Problem woanders.
Wäre praktisch, wenn du die Fehlermeldung MIT den Attributen posten könntest, anstatt bloß die Vorlage.
Gruß
Snow
Unter welchem Account führt der Taskplaner dein Script denn aus?
Führe mal folgendes über den Taskplaner aus:
setlocal enabledelayedexpansion
SET WorkingDrive=%~d0
SET WorkingDir=%~pd0
SET WorkingDir=%WorkingDir:~0,-1%
SET WorkingD>C:\workdir.log
C.\workdir.log
an. Poste ihn auch hier.Wenn das schon fehlschlägt (also wieder die Fehlermeldung vom Taskplaner), dann liegt dein Problem woanders.
Wäre praktisch, wenn du die Fehlermeldung MIT den Attributen posten könntest, anstatt bloß die Vorlage.
Gruß
Snow
Also laut der Fehlermeldung läuft ein entsprechender Task bereits unter dem SYSTEMkonto. Was natürlich nicht sein sollte.
Das Parameterpaar /sc minute /mo 60 lässt sich auch /sc hourly kürzen.
Der Parameter /st 08:00:00 ist laut Technet falsch. Hier wird ein HH:MM-Format erwartet. Also /st 08:00.
Laut /ru "Highend" (ohne Domäne?) und /it soll der Task bloß laufen, wenn du mit Highend eingeloggt bist.
Was etwas eigenartig ist:
Trotz /F kommt die Warnung, dass ein Task bereits läuft.
Kennst du den /V1-Switch?
Weiter Infos beim MSDN.
Gruß
Snow
Das Parameterpaar /sc minute /mo 60 lässt sich auch /sc hourly kürzen.
Der Parameter /st 08:00:00 ist laut Technet falsch. Hier wird ein HH:MM-Format erwartet. Also /st 08:00.
Laut /ru "Highend" (ohne Domäne?) und /it soll der Task bloß laufen, wenn du mit Highend eingeloggt bist.
Was etwas eigenartig ist:
Trotz /F kommt die Warnung, dass ein Task bereits läuft.
Kennst du den /V1-Switch?
Weiter Infos beim MSDN.
Gruß
Snow
moin,
Zeile 57
Ja und das ist genau der von Dir erstellte?
Dann lösche doch den alten "rsync" Task und schreib den danach komplett neu.
PS.
Gruß Phil
Es bleibt wohl bei der Frage, warum der Taskplaner denkt, er könnte den gleichen Task als eingeloggter Benutzer
und als SYSTEM ausführen, obwohl der Task nur einmal unter Benutzerprivilegien eingetragen wurde.
und als SYSTEM ausführen, obwohl der Task nur einmal unter Benutzerprivilegien eingetragen wurde.
Zeile 57
schtasks /query | findstr /i /c:"Rsync" >NUL 2>NUL
Dann lösche doch den alten "rsync" Task und schreib den danach komplett neu.
PS.
schtasks /create /?|more +130|find /v ""|more
Gruß Phil
Ich glaube, dass sich das Thema nach über einem Jahr erledigt hat und der Themenersteller hierzu auch keine detailierten Angaben mehr machen kann, wo es gehakt hat.
Siehe auch >> Thread Necromancer
Gruß
Snow
Siehe auch >> Thread Necromancer
Gruß
Snow
moin Snow,
schi.. Tabbrowsing. Das war gar nicht so beabsichtigt. Irgendwie ist mir nur 15.03. ins Auge gefallen.
Ich gelobe Besserung.
wäre es mir direkt aufgefallen, hätte ich anders Eingeleitet (ist zwar schon ne weile her ...)
Ich kanns ja nicht mal auf die Sonneneinstrahlung schieben, das müsste sonst gegen 17 Uhr gewesen sein.
Gruß Phil
schi.. Tabbrowsing. Das war gar nicht so beabsichtigt. Irgendwie ist mir nur 15.03. ins Auge gefallen.
Ich gelobe Besserung.
wäre es mir direkt aufgefallen, hätte ich anders Eingeleitet (ist zwar schon ne weile her ...)
Ich kanns ja nicht mal auf die Sonneneinstrahlung schieben, das müsste sonst gegen 17 Uhr gewesen sein.
Gruß Phil