Лучший отвечающий
Не выполняется .cmd задача в Task Scheduler

Вопрос
-
Имеем Vista х64 и .cmd файл. Внтури него выполняется несколько действий и запускаются 3 .exe файла по очереди.
Если запустить .cmd руками, то всё отлично работает.
Если через Task Scheduler, то задача запускается, в Task Manager'е появляется "cmd.exe /C file.cmd" Task Scheduler пишет в лог что всё стартовано и успешно завершено, возвращает code 1.
Но на самом деле ничего не выполняется.
Скрипт запусткает по времени, от имени local service с highest privileges.
Как можно еще трабелшутить этот Task Scheduler ??29 марта 2009 г. 20:54
Ответы
-
С путями вроде все нормально.
Исключил все утилиты, оставил только одну, не работает.
Шедулер пишет в лог что всё successfully, но...
--- file.cmd start---
@echo off
set d=%DATE%set eMail=x@mail.ru
set From=x@mail.ru
set server=-server smtp.mail.ru
set debug=-debug -log blat.log -timestamp::::::::::::::::: Now we run Blat! :::::::::::::::::
blat "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt" -to %eMail% -f %eMail% -i %From% %server% %debug%
--- file.cmd stop---
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/- Предложено в качестве ответа Aleksey Potapov 30 марта 2009 г. 6:25
- Помечено в качестве ответа Vinokurov YuriyModerator 12 августа 2009 г. 10:23
30 марта 2009 г. 6:22 -
В общем достало меня всё это, победил методом тыка.
Если сменить юзера от имени которого запускать скрипт с LOCAL SERVICE на юзера реального то работает первая схема:
**************
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%CD:\ZzZ\Soft\BLAT\sed.exe s/^.\{43\}// "C:\Program Files (x86)\KIWI Syslogd\Logs\%year%-%month%-%day%.txt" > "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"
D:\ZzZ\Soft\BLAT\blat.exe "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"
**************
Если запускать от LOCAL SERVICE надо будет сделать так:
**************
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%C
for /f "tokens=1-3 delims= " %%D in ("%day%") do set dd=%%D
for /f "tokens=1-3 delims= " %%D in ("%day%") do set mm=%%Efor /f "tokens=1-3 delims=/" %%F in ("%mm%") do set d1=%%F
for /f "tokens=1-3 delims=/" %%F in ("%mm%") do set d2=%%G
for /f "tokens=1-3 delims=/" %%F in ("%mm%") do set d3=%%H
D:\ZzZ\Soft\BLAT\sed.exe s/^.\{43\}// "C:\Program Files (x86)\KIWI Syslogd\Logs\%d3%-%d1%-%d2%.txt" > "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"
D:\ZzZ\Soft\BLAT\blat.exe "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"
**************
Fuсking windows...
PS: cognize_ спасибо за помощь и время! you are very kind!:)- Помечено в качестве ответа Vinokurov YuriyModerator 12 августа 2009 г. 10:23
30 марта 2009 г. 15:22
Все ответы
-
Имеем Vista х64 и .cmd файл. Внтури него выполняется несколько действий и запускаются 3 .exe файла по очереди.
Если запустить .cmd руками, то всё отлично работает.
Если через Task Scheduler, то задача запускается, в Task Manager'е появляется "cmd.exe /C file.cmd" Task Scheduler пишет в лог что всё стартовано и успешно завершено, возвращает code 1.
Но на самом деле ничего не выполняется.
Скрипт запусткает по времени, от имени local service с highest privileges.
Как можно еще трабелшутить этот Task Scheduler ??
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 5:16 -
Конечно остаётся:)30 марта 2009 г. 5:44
-
А В логах ошибки есть?
Если сообщение полезно, нажмите "Сообщение было информативным". Если сообщение является ответом или частью ответа на Ваш вопрос, нажмите "Пометить как ответ".30 марта 2009 г. 5:49 -
Конечно остаётся:)
Покажите cmd файл - возможно пути к исполняемым файлам или командам не заданы в явном виде
К примеру используете notepad.exe вместо c:\windows\notepad.exe
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 5:53 -
С путями вроде все нормально.
Исключил все утилиты, оставил только одну, не работает.
Шедулер пишет в лог что всё successfully, но...
--- file.cmd start---
@echo off
set d=%DATE%set eMail=x@mail.ru
set From=x@mail.ru
set server=-server smtp.mail.ru
set debug=-debug -log blat.log -timestamp::::::::::::::::: Now we run Blat! :::::::::::::::::
blat "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt" -to %eMail% -f %eMail% -i %From% %server% %debug%
--- file.cmd stop---
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/- Предложено в качестве ответа Aleksey Potapov 30 марта 2009 г. 6:25
- Помечено в качестве ответа Vinokurov YuriyModerator 12 августа 2009 г. 10:23
30 марта 2009 г. 6:22 -
Вот оно!
Спасибо:)30 марта 2009 г. 6:24 -
Продолжаем разговор;)
Ситуация та же, ручной запуск отрабатывает отлично, через шедулер нет.
--- file.cmd start---
@echo off
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%C
D:\ZzZ\Soft\BLAT\sed.exe "s/^.\{43\}//" "C:\%year%-%month%-%day%.txt" > "C:\formatted.txt"
--- file.cmd stop---
Смысл - обработать SED'ом файл 2009-03-30.txt
Проверял отработку первых трёх строк через выполнение в шедулере скрипта:
--- file.cmd start---
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%Cecho %day% > "C:\formatted.txt"
echo %month% >> "C:\formatted.txt"
echo %year% >> "C:\formatted.txt"
--- file.cmd stop---
Т.е. имя файла SED получает, но ничего с ним не делает:(
Может опять я что-то упустил?30 марта 2009 г. 6:52 -
Продолжаем разговор;)
Ситуация та же, ручной запуск отрабатывает отлично, через шедулер нет.
--- file.cmd start---
@echo off
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%C
D:\ZzZ\Soft\BLAT\sed.exe "s/^.\{43\}//" "C:\%year%-%month%-%day%.txt" > "C:\formatted.txt"
--- file.cmd stop---
Смысл - обработать SED'ом файл 2009-03-30.txt
Проверял отработку первых трёх строк через выполнение в шедулере скрипта:
--- file.cmd start---
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%Cecho %day% > "C:\formatted.txt"
echo %month% >> "C:\formatted.txt"
echo %year% >> "C:\formatted.txt"
--- file.cmd stop---
Т.е. имя файла SED получает, но ничего с ним не делает:(
Может опять я что-то упустил?
Можно попробовать следующим образом:
Создать script.vbs
set wshshell = CreateObject("WScript.Shell")
wshshell.Run "c:\script\run.cmd"
Поместить script.vbs в назначеные задания и попробовать его выполнить.
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 6:56 -
С wsh попробую, спасибо.
Но похоже дело в отдаче переменных полученных из %DATE% следующей утилите.
Т.е. если заменить SED на простое MORE, то тоже ничего не происходит. Имя файла не передаётся, либо передаётся не то имя которое хотелось бы, но я не знаю как посмотреть т.к. виндовый SED не имеет опции логгинга:)
Хотя при запуске руками имя файла передаётся правильное...30 марта 2009 г. 8:03 -
Дату можно так задавать:
strComputer = "."
Set objNetwork = Wscript.CreateObject("Wscript.Network")
computerName = objNetwork.ComputerName
username =objNetwork.UserName
Dim objFileSystem, objOutputFile
Dim strOutputFile
Dim MyDate
MyDate = Date
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
set wshshell = CreateObject("WScript.Shell")
Set objEnv = WshShell.Environment("PROCESS")
objEnv("Year") = Year(now())
objEnv("Month") = Right("0" & Month(now()), 2)
objEnv("Day") = Right("0" & Day(now()), 2)
objEnv("Hour") = Right("0" & Hour(now()), 2)
objEnv("Minute") = Right("0" & Minute(now()), 2)
objEnv("Second") = Right("0" & Second(now()), 2)
wshshell.Run "%comspec% /c ipconfig /all >\\server\ip\%computername%-%username%-%Day%.%Month%.%Year%-%Hour%-%Minute%.txt"
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 8:06 -
Ниче не понял%)
Дату задавать не надо, её надо получить из текущей.
Syslog пишет в .txt файлы с именами YYYY-MM-DD.txt
%DATE% выдаёт дату в формате DD.MM.YYYY
Раз в день SED получает имя файла, манипулирует с его содержимым и отдаёт дальше по цепочке.
Я инвертирую дату полученную из %DATE% ранее описанным способом:
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%C
При подстановке more "C:\%year%-%month%-%day%.txt" > "C:\formatted.txt" ничего не проиходит через запуск из шедулера, но всё работает при запуске скрипта руками.
Вот как-то так:)30 марта 2009 г. 8:17 -
Ниче не понял%)
Так попробуйте: script.vbs:
Дату задавать не надо, её надо получить из текущей.
Syslog пишет в .txt файлы с именами YYYY-MM-DD.txt
%DATE% выдаёт дату в формате DD.MM.YYYY
Раз в день SED получает имя файла, манипулирует с его содержимым и отдаёт дальше по цепочке.
Я инвертирую дату полученную из %DATE% ранее описанным способом:
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%C
При подстановке more "C:\%year%-%month%-%day%.txt" > "C:\formatted.txt" ничего не проиходит через запуск из шедулера, но всё работает при запуске скрипта руками.
Вот как-то так:)
strComputer = "."
Set objNetwork = Wscript.CreateObject("Wscript.Network")
computerName = objNetwork.ComputerName
username =objNetwork.UserName
Dim objFileSystem, objOutputFile
Dim strOutputFile
Dim MyDate
MyDate = Date
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
set wshshell = CreateObject("WScript.Shell")
Set objEnv = WshShell.Environment("PROCESS")
objEnv("Year") = Year(now())
objEnv("Month") = Right("0" & Month(now()), 2)
objEnv("Day") = Right("0" & Day(now()), 2)
wshshell.Run "D:\ZzZ\Soft\BLAT\sed.exe "s/^.\{43\}//" "C:\%year%-%month%-%day%.txt" > "C:\formatted.txt""
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 8:24 -
Запустил .vbs, теперь эта задача висит в состоянии Running всё время:)
Евент лог:
Task Engine "S-1-5-19:NT AUTHORITY\LocalService:Service:" received a message from Task Scheduler service requesting to launch task "\My schedules\Email syslog messages" .
Task Scheduler launched action "D:\ZzZ\Soft\BLAT\blat.vbs" in instance "{edee22e0-5107-40e6-b8dd-c54dfce4b100}" of task "\My schedules\Email syslog messages".
Task Scheduler started "{edee22e0-5107-40e6-b8dd-c54dfce4b100}" instance of the "\My schedules\Email syslog messages" task for user "NT AUTHORITY\LOCAL SERVICE".
Task Scheduler launch task "\My schedules\Email syslog messages" , instance "C:\Windows\System32\WScript.exe" with process ID 3884.
wscript.exe с таким PIDом висит в таск манагере, в общем ничего не проиходит, как и раньше;)
Поменял D:\ZzZ\Soft\BLAT\sed.exe "s/^.\{43\}//" на простое more, ситуация таже, висит в состоянии Running30 марта 2009 г. 8:52 -
Запустил .vbs, теперь эта задача висит в состоянии Running всё время:)
Вручную скрипт нормально запускается ?
Евент лог:
Task Engine "S-1-5-19:NT AUTHORITY\LocalService:Service:" received a message from Task Scheduler service requesting to launch task "\My schedules\Email syslog messages" .
Task Scheduler launched action "D:\ZzZ\Soft\BLAT\blat.vbs" in instance "{edee22e0-5107-40e6-b8dd-c54dfce4b100}" of task "\My schedules\Email syslog messages".
Task Scheduler started "{edee22e0-5107-40e6-b8dd-c54dfce4b100}" instance of the "\My schedules\Email syslog messages" task for user "NT AUTHORITY\LOCAL SERVICE".
Task Scheduler launch task "\My schedules\Email syslog messages" , instance "C:\Windows\System32\WScript.exe" with process ID 3884.
wscript.exe с таким PIDом висит в таск манагере, в общем ничего не проиходит, как и раньше;)
Поменял D:\ZzZ\Soft\BLAT\sed.exe "s/^.\{43\}//" на простое more, ситуация таже, висит в состоянии Running
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 8:54 -
Руками тоже не запускается:
Line 17
Char 21
Error Expected end of statement
Code 800a040130 марта 2009 г. 8:57 -
а, дык это я дурак;)
сорри, щас перепроверю30 марта 2009 г. 8:58 -
Спотыкается на выполнении
wshshell.Run "D:\ZzZ\Soft\BLAT\sed.exe "s/^.\{43\}//" "C:\%year%-%month%-%day%.txt" > "C:\formatted.txt""
Ругается на отркывающую кавычку перед ключами к SED'у - "s/^
Можно ли как-то эскейпить кавычки внутри кавычек в wsh? Или это как то по другому называется/делается, на знаю:)30 марта 2009 г. 9:02 -
Спотыкается на выполнении
Можно попробовать поиграться с переменными
wshshell.Run "D:\ZzZ\Soft\BLAT\sed.exe "s/^.\{43\}//" "C:\%year%-%month%-%day%.txt" > "C:\formatted.txt""
Ругается на отркывающую кавычку перед ключами к SED'у - "s/^
Можно ли как-то эскейпить кавычки внутри кавычек в wsh? Или это как то по другому называется/делается, на знаю:)
objEnv("sedparam") = s/^.\{43\}//
wshshell.Run "D:\ZzZ\Soft\BLAT\sed.exe sedparam ...
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 9:05 -
Сделал так:
strComputer = "."
Set objNetwork = Wscript.CreateObject("Wscript.Network")
computerName = objNetwork.ComputerName
username =objNetwork.UserName
Dim objFileSystem, objOutputFile
Dim strOutputFile
Dim MyDate
MyDate = DateSet objFileSystem = CreateObject("Scripting.fileSystemObject")
set wshshell = CreateObject("WScript.Shell")
Set objEnv = WshShell.Environment("PROCESS")
objEnv("Year") = Year(now())
objEnv("Month") = Right("0" & Month(now()), 2)
objEnv("Day") = Right("0" & Day(now()), 2)objEnv("path1") = "C:\Program Files (x86)\KIWI Syslogd\Logs\%year%-%month%-%day%.txt"
objEnv("path2") = "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"wshshell.Run "more path1 > path2"
Ошибки больше нет, при запуске руками из cmd мелькает черное окошко, но ничего не происходит:)
Последствий своих действий .vbs не показывет:(30 марта 2009 г. 9:47 -
Сделал так:
strComputer = "."
Set objNetwork = Wscript.CreateObject("Wscript.Network")
computerName = objNetwork.ComputerName
username =objNetwork.UserName
Dim objFileSystem, objOutputFile
Dim strOutputFile
Dim MyDate
MyDate = DateSet objFileSystem = CreateObject("Scripting.fileSystemObject")
set wshshell = CreateObject("WScript.Shell")
Set objEnv = WshShell.Environment("PROCESS")
objEnv("Year") = Year(now())
objEnv("Month") = Right("0" & Month(now()), 2)
objEnv("Day") = Right("0" & Day(now()), 2)objEnv("path1") = "C:\Program Files (x86)\KIWI Syslogd\Logs\%year%-%month%-%day%.txt"
objEnv("path2") = "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"wshshell.Run "more path1 > path2"
Ошибки больше нет, при запуске руками из cmd мелькает черное окошко, но ничего не происходит:)
Последствий своих действий .vbs не показывет:(
objEnv("path1") = "C:\Program Files (x86)\KIWI Syslogd\Logs"
wshshell.Run "c:\WINDOWS\system32\more.com path1\%year%-%month%-%day%.txt > path1\formatted.txt"
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 9:51 -
Тоже самое, мелькает черное окошко но "more file1 > file2" не работает:)
Как можно дебажить результат выполнения скрипта .vbs?30 марта 2009 г. 10:16 -
Тоже самое, мелькает черное окошко но "more file1 > file2" не работает:)
Что происходит при выполнении в командной строке следующей команды:
Как можно дебажить результат выполнения скрипта .vbs?
Файл %year%-%month%-%day%.txt присутствует ?
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 10:24 -
Почему то в шедулере меняется вывод %date%
Включив утилиту BLAT в цепочку следующим образом:
D:\ZzZ\Soft\BLAT\blat.exe "C:\Program Files (x86)\KIWI Syslogd\Logs\%year%-%month%-%day%.txt"
Получил следующую ошибку:
Blat v2.6.2 w/GSS encryption (build : Feb 25 2007 12:06:19)
2009.03.30 14:20:42 (Mon): unknown error code 3 when trying to open C:\Program Files (x86)\KIWI Syslogd\Logs\--Mon 03/30/2009.txt
хм...
Как так?
Т.е. в консоли я получаю dd.mm.yyyy а из шедулера Mmm dd/mm/yyyy
:(30 марта 2009 г. 11:13 -
В региональных параметрах сервера какая временная зона стоит и какой язык выбран на всех вкладках ?
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 11:21 -
Time Zone GMT +3 Moscow
Location Russia
Language for non-unicode Russian
Default input language English30 марта 2009 г. 14:25 -
Time Zone GMT +3 Moscow
На первой вкладке дата так отображается ?
Location Russia
Language for non-unicode Russian
Default input language English
Long date:30 марта 2009 г.
Первое правило Windows - делай резервную копию. Коды ошибок смотрите по адресу http://support.microsoft.com и http://eventid.net/30 марта 2009 г. 14:29 -
Да так, формат Russian.30 марта 2009 г. 14:38
-
В общем достало меня всё это, победил методом тыка.
Если сменить юзера от имени которого запускать скрипт с LOCAL SERVICE на юзера реального то работает первая схема:
**************
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%CD:\ZzZ\Soft\BLAT\sed.exe s/^.\{43\}// "C:\Program Files (x86)\KIWI Syslogd\Logs\%year%-%month%-%day%.txt" > "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"
D:\ZzZ\Soft\BLAT\blat.exe "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"
**************
Если запускать от LOCAL SERVICE надо будет сделать так:
**************
for /f "tokens=1-3 delims=." %%A in ("%date%") do set day=%%A
for /f "tokens=1-3 delims=." %%A in ("%date%") do set month=%%B
for /f "tokens=1-3 delims=." %%A in ("%date%") do set year=%%C
for /f "tokens=1-3 delims= " %%D in ("%day%") do set dd=%%D
for /f "tokens=1-3 delims= " %%D in ("%day%") do set mm=%%Efor /f "tokens=1-3 delims=/" %%F in ("%mm%") do set d1=%%F
for /f "tokens=1-3 delims=/" %%F in ("%mm%") do set d2=%%G
for /f "tokens=1-3 delims=/" %%F in ("%mm%") do set d3=%%H
D:\ZzZ\Soft\BLAT\sed.exe s/^.\{43\}// "C:\Program Files (x86)\KIWI Syslogd\Logs\%d3%-%d1%-%d2%.txt" > "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"
D:\ZzZ\Soft\BLAT\blat.exe "C:\Program Files (x86)\KIWI Syslogd\Logs\formatted.txt"
**************
Fuсking windows...
PS: cognize_ спасибо за помощь и время! you are very kind!:)- Помечено в качестве ответа Vinokurov YuriyModerator 12 августа 2009 г. 10:23
30 марта 2009 г. 15:22