Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Планировщик и скрипт архивации c помощью ntbackup (http://forum.oszone.net/showthread.php?t=186836)

Udar_Nick 29-09-2010 11:56 1507203

Планировщик и скрипт архивации c помощью ntbackup
 
Приветствую уважаемый форум!

Стащил из http://forum.oszone.net/post-616207-2.html
скрипт архивации c помощью ntbackup
настроил под себя... и..
наткнулся на странную проблему..

скрипт отрабатывает при запуске дв.кликом, при запуске из шедулера, но только если залогонен пользователь!
это же задание шедулера не выполняется если юзер не залогонен :-(
запуск из шедулера под админским аккаунтом (домен АД)
в логах системы ничего
в логах шедулера "The task completed with an exits code of (1)"

ОС Windows Server 2003 R2 Service Pack 2 ENG

Подскажите, пожалуйста, что делать?

Заранее благодарен,
Александр

Petya V4sechkin 29-09-2010 12:16 1507215

Udar_Nick, попробуйте в задании прописать запуск через cmd /c
Код:

cmd.exe /c полное_имя_скрипта

Udar_Nick 29-09-2010 12:27 1507220

Увы, это не помогло. Результат тот же :-(

Petya V4sechkin 29-09-2010 12:35 1507229

Udar_Nick, скрипт должен создавать лог в текущей папке.
Галка "Выполнять только при выполненном входе в систему" в свойствах задания снята?

Udar_Nick 29-09-2010 12:51 1507246

Все верно, но скрипт лога не создает в случае запуска по расписанию и без залогоненого юзера (видимо до этого не доходит)
Указанная Вами галка снята

Я подозреваю, что в скрипте есть что-то особенное, что не дает ему выполниться по шедулеру ибо есть иной скрипт (очень простой :-) ), выполняющийся под этим же пользователем (админом) и в тех же условиях без подобных проблем:


Код:

@echo off
 copy e:\backup\system\master-systemstate.bkf \\reserv3\arc\master\system\systemstate-%DATE%.bkf
GoTo :EOF

Добавление:

Испробовал тот же скрипт под тем же юзером но на рабочей машине с WinXP Prof RUS SP3 - абсолютно тот же эффект - в логах нули, в логах шедулера
Закончилось в 29.09.2010 14:45:00
Итог: Задание завершено с кодом (1).

Udar_Nick 30-09-2010 12:17 1508071

скомпилировал этот скрипт в exe
таже картина - отрабатывает по расписанию если кто-то залогонен
если нет - ошибка 0х1 в шедулере

даже не знаю куда смотреть... :-(

amel27 30-09-2010 13:02 1508099

Udar_Nick, под этой доменной учеткой нужно хотя бы раз залогиниться интерактивно (чтобы сформировался профиль и переменная APPDATA), и хотя бы раз запустить NTBackup (чтобы сформировался путь ...\User\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data)

Udar_Nick 30-09-2010 13:39 1508119

amel27, ну как я и писал ВЫШЕ - много раз я логонился под ИМЕННО ЭТОЙ учеткой, под ней запускал скрипт

может быть проблема в том что cmd-шник я сейчас запускаю из e:\backup\database (куда и кладу сам бэкап)

по права на эту папку достаточные..
сейчас пробую запускать из под nncron lite - таже картина
явно дело в скрипте

amel27 30-09-2010 14:50 1508163

Udar_Nick, стандартный приём: запускать батник с параметрами типа "test.cmd >c:\err.log 2>&1",
предварительно заменив в батнике "@echo off" -> "@echo on", потом см. лог

NiOl 30-09-2010 14:55 1508167

Думаю проблема в пользователе, который используется шедулером - попробуйте простой тест, что будет на выходе после шедулера?

Код:

@echo %USERDOMAIN%\%USERNAME%: %CD%>%~dpn0.txt

Udar_Nick 30-09-2010 15:16 1508182

Цитата:

Цитата amel27
стандартный приём: запускать батник с параметрами типа "test.cmd >c:\err.log 2>&1" »

Итак, в шедулере у меня такая строка (все как здесь, т.е. без кавычек, не знаю нужны они или нет)
Код:

C:\WINDOWS\system32\cmd.exe /c E:\backup\database\database.cmd >c:\err.log 2>&1
поставил в расписание - сделал LOG OFF - подождал - смотрю содержимое файла c:\err.log
Код:


E:\backup\database>SetLocal EnableDelayedExpansion

E:\backup\database>SET SOURCE=D:\resourse\backup_bases

E:\backup\database>SET FULLDEPTH=3

E:\backup\database>SET INCRDEPTH=5

E:\backup\database>Call :CallEx GetState

E:\backup\database>Call :GetState

E:\backup\database>For /F "Delims=" %i in (database.ini) Do Set /A %i+0

E:\backup\database>Set /A INCREMENT=0 +0

E:\backup\database>If "0" == "" (
Echo INCREMENT=0  1>database.ini 
 For /F "Delims=" %i in (database.ini) Do Set /A %i+0 
 If Not "!INCREMENT!" == "0" (
Set INCREMENT=0 
 Exit /B 2
)
)

E:\backup\database>GoTo :EOF

E:\backup\database>If 0 EQU 1 (
Echo.
 Echo Модуль "GetState" вызвал исключение, работа скрипта прервана! 
 Exit 
)

E:\backup\database>If 0 EQU 2 Echo Модуль "GetState" вызвал некритичную ошибку, работа скрипта продолжена.

E:\backup\database>GoTo :EOF

E:\backup\database>Call :CallEx DelLogs

E:\backup\database>Call :DelLogs

E:\backup\database>Set $BakData=~0,-17\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data

E:\backup\database>Del /Q /F "~0,-17\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data\backup*.log"  1>nul
The system cannot find the path specified.

E:\backup\database>If 1 NEQ 0 Exit /B 1

E:\backup\database>If 1 EQU 1 (
Echo.
 Echo Модуль "DelLogs" вызвал исключение, работа скрипта прервана! 
 Exit 
)

Модуль "DelLogs" вызвал исключение, работа скрипта прервана

Большое спасибо, что откликнулись
Что с этим делать дальше не знаю...

Petya V4sechkin 30-09-2010 15:23 1508183

Цитата:

Цитата Udar_Nick
Set $BakData=~0,-17

Вот оно что, переменная APPDATA не определяется (если вход не интерактивный).

Udar_Nick 30-09-2010 15:28 1508187

Цитата:

Цитата NiOl
Думаю проблема в пользователе, который используется шедулером - попробуйте простой тест, что будет на выходе после шедулера?
Код:
@echo %USERDOMAIN%\%USERNAME%: %CD%>%~dpn0.txt »


задание выполняется под OFFICE\Aleks

в шедулере: cmd /c C:\test.cmd (содержащий Вашу строчку)

на выходе получил файл в корне диска C: с именем test.txt содержащий:
Код:

OFFICE\Aleks: C:\WINDOWS\system32

Спасибо что откликнулись :-)

Petya V4sechkin 30-09-2010 15:33 1508194

Udar_Nick, в принципе, можно заменить строчку (их две штуки):
Код:

Set $BakData=%APPDATA:~0,-17%\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data
на:
Код:

Set $BakData=%UserProfile%\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data

Udar_Nick 30-09-2010 15:47 1508203

Цитата:

Цитата Petya V4sechkin
Udar_Nick, в принципе, можно заменить строчку (их две штуки): »

УРА! СПАСИБО! РАБОТАЕТ!

Udar_Nick 10-02-2011 12:02 1609187

Приветствую уважаемый форум!

Опять столкнулся с проблемкой по этому скрипту...

Решение выше заработало на Win 2003 Enterprice Server SP2 ENG

А вот на Win XP SP3 RUS - скрипт не отрабатывает... причем пока запускаю его не шедулером, а руками

делаю вывод ошибок в файл, вот его содержимое
Код:

:\Documents and Settings\Reanimator>SetLocal EnableDelayedExpansion

C:\Documents and Settings\Reanimator>SET SOURCE="@C:\backup-log\admin03.bks"

C:\Documents and Settings\Reanimator>SET FULLDEPTH=5

C:\Documents and Settings\Reanimator>SET INCRDEPTH=6

C:\Documents and Settings\Reanimator>Call :CallEx GetState

C:\Documents and Settings\Reanimator>Call :GetState

C:\Documents and Settings\Reanimator>For /F "Delims=" %i in (admin03.ini) Do Set /A %i+0

C:\Documents and Settings\Reanimator>Set /A INCREMENT=1 +0

C:\Documents and Settings\Reanimator>If "1" == "" (
Echo INCREMENT=0  1>admin03.ini 
 For /F "Delims=" %i in (admin03.ini) Do Set /A %i+0 
 If Not "!INCREMENT!" == "0" (
Set INCREMENT=0 
 Exit /B 2
)
)

C:\Documents and Settings\Reanimator>GoTo :EOF

C:\Documents and Settings\Reanimator>If 0 EQU 1 (
Echo.
 Echo Модуль "GetState" вызвал исключение, работа скрипта прервана! 
 Exit 
)

C:\Documents and Settings\Reanimator>If 0 EQU 2 Echo Модуль "GetState" вызвал некритичную ошибку, работа скрипта продолжена.

C:\Documents and Settings\Reanimator>GoTo :EOF

C:\Documents and Settings\Reanimator>Call :CallEx DelLogs

C:\Documents and Settings\Reanimator>Call :DelLogs

C:\Documents and Settings\Reanimator>Set $BakData=C:\Documents and Settings\Reanimator\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data

C:\Documents and Settings\Reanimator>Del /Q /F "C:\Documents and Settings\Reanimator\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data\backup*.log"  1>nul

C:\Documents and Settings\Reanimator>If 0 NEQ 0 Exit /B 1

C:\Documents and Settings\Reanimator>GoTo :EOF

C:\Documents and Settings\Reanimator>If 0 EQU 1 (
Echo.
 Echo Модуль "DelLogs" вызвал исключение, работа скрипта прервана! 
 Exit 
)

C:\Documents and Settings\Reanimator>If 0 EQU 2 Echo Модуль "DelLogs" вызвал некритичную ошибку, работа скрипта продолжена.

C:\Documents and Settings\Reanimator>GoTo :EOF

C:\Documents and Settings\Reanimator>Call :CallEx StartCMD

C:\Documents and Settings\Reanimator>Call :StartCMD

C:\Documents and Settings\Reanimator>Set $CMD=ntbackup backup "@C:\backup-log\admin03.bks" /f "c:\backup-log\admin03.0.bkf" /l:f /m incremental /a

C:\Documents and Settings\Reanimator>If 1 EQU 0 Set $CMD=ntbackup backup "@C:\backup-log\admin03.bks" /f "c:\backup-log\admin03.bkf"  /m normal /l:f

C:\Documents and Settings\Reanimator>Start /WAIT ntbackup backup "@C:\backup-log\admin03.bks" /f "c:\backup-log\admin03.0.bkf" /l:f /m incremental /a

C:\Documents and Settings\Reanimator>If 0 NEQ 0 (
Call :CallEx CopyLog 
 Echo При выполнении резервного копирования возникли ошибки, 
 Echo Смотрите журнал сообщений: "admin03.log". 
 Exit /B 1
)

C:\Documents and Settings\Reanimator>Call :CallEx CopyLog

C:\Documents and Settings\Reanimator>Call :CopyLog

C:\Documents and Settings\Reanimator>Set $BakData=C:\Documents and Settings\Reanimator\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data

C:\Documents and Settings\Reanimator>If 1 EQU 0 (Copy "C:\Documents and Settings\Reanimator\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data\backup*.log" admin03.log  1>nul )  Else (Copy /B admin03.0.log+"C:\Documents and Settings\Reanimator\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data\backup*.log" admin03.0.log  1>nul )

C:\Documents and Settings\Reanimator>If 1 NEQ 0 Exit /B 1

C:\Documents and Settings\Reanimator>If 1 EQU 1 (
Echo.
 Echo Модуль "CopyLog" вызвал исключение, работа скрипта прервана! 
 Exit 
)

Модуль "CopyLog" вызвал исключение, работа скрипта прервана

Подскажите пожалуйста, в чем может быть ошибка?


Время: 05:10.

Время: 05:10.
© OSzone.net 2001-