Задача не отрабатывает полностью.

Обсуждение программ nnCron и nnCron LITE

Задача не отрабатывает полностью.

Postby Kobold » Tue, 24 Jul 2012, 11:39

Здравствуйте, уважаемые!

Во-первых, спасибо разработчику(ам) за прекрасный планировщик с огромными возможностями.
Во-вторых, помогите разобраться с проблемой. Доки читал-перечитывал, ничего не вычитал. Скорее всего, я сам не разобрался с кроном, однако идеология довольно необычная (особенно ЯП Форт) и сложная для схватывания "на лету" (и даже не на лету).

Версия крона - 1.91 Build 1083, ОС - Windows 2003 Server x64 Standard SP2. Где взять последнюю версию крона - на сайте не нашёл (скорее всего, плохо искал).

Итак, есть задача (по пунктам):

1. Сделать бэкап базы данных (cmd-скрипт внутри которого вызывается sql-запрос через утилиту sqlcmd). СУБД - SQL Server
2. Скопировать бэкап базы данных на удалённый сервер.
3. Сжать вчерашние бэкапы архиватором (WinRAR).
4. Переместить сжатые вчерашние бэкапы на удалённый сервер.
5. Удалить несжатые вчерашние бэкапы на удалённом сервере.
6. Удалить сжатые бэкапы на удалённом сервере старше недели.
7. Удалить несжатые бэкапы на локальном сервере старше трёх дней.

Для решения этой задачи был создан следующий таск в nncron

Code: Select all
#( CEAPP_FULL_backup
  Time: 0 0 * * * *
  User: "Administrator" SecPassword: "***********************" Domain: "DOMAIN" LogonInteractive
  \ Переменная, в которую заносится вчерашний день
  CREATE YTD 256 ALLOT
  Action:
      \ Вычисление вчерашней даты в формате YYYY-MM-DD (строка) - взял за основу конструкцию с форума
      CUR-DATE DATE>YMD -1 DAY+
      ROT S>D <# # # # # #> YTD ZPLACE S" -" YTD +ZPLACE
      SWAP S>D <# # # #> YTD +ZPLACE S" -" YTD +ZPLACE
      S>D <# # # #> YTD +ZPLACE
      \ Конец вычисления
 
      \ Запуск сегодняшнего полного бэкапа. Передаются формат даты и файл журнала.
      StartIn: "D:\MSSQL.1\MSSQL\Backup"
      NormalPriority AsService
      START-APPW: D:\Scripts\FULLBackup.cmd %YYYY%-%MM%-%DD% %FOLDER-TEMP%\FullBackup.log
      \ Копирование бэкапа на сетевой ресурс
      FILE-COPY: "D:\MSSQL.1\MSSQL\Backup\CEAPP_%YYYY%-%MM%-%DD%_FULL.bak" "\\CEFILES.Backend\BACKUP$\Daily\SQL01\"

      \ Обработка вчерашних бэкапов
      FOR-FILES: "D:\MSSQL.1\MSSQL\Backup\CEAPP_%YTD ASCIIZ>%*.bak"

        \ Регулярное выражение, которое вычленяет из файла его имя без расширения
        RE-MATCH: "%FOUND-FILENAME%" "/(.*)\.bak/i"
        IF

          \ Сжатие архиватором
          StartIn: "D:\MSSQL.1\MSSQL\Backup"
          NormalPriority AsService
          START-APPW: "C:\Program Files\WinRAR\rar.exe" a -s %$1%.rar %FOUND-FILENAME%

          \ Перемещение сжатого файла на файловый сервер
          FILE-MOVE: "%$1%.rar" "\\CEFILES.Backend\BACKUP$\Daily\SQL01\"

          \ Удаление несжатого вчерашнего бэкапа на файловом сервере
          FILE-DELETE: "\\CEFILES.Backend\BACKUP$\Daily\SQL01\%FOUND-FILENAME%"

        THEN
      ;FOR-FILES
     
      \ Удаление всех сжатых файлов на удалённом файловом сервере возрастом старше недели     
      PURGE-OLD: "\\CEFILES.Backend\BACKUP$\Daily\SQL01\CEAPP_*.rar" 7
      \ Удаление всех несжатых файлов на локальном SQL-сервере возрастом старше трёх дней     
      PURGE-OLD: "D:\MSSQL.1\MSSQL\Backup\CEAPP_*.bak" 3

)#



К сожалению, эти операторы ничего не сообщают о себе в логах (в противном случае было бы легче понять, что к чему). В результате выполнения задачи не отрабатывает FILE-MOVE и FILE-DELETE в цикле FOR-FILES и оба оператора PURGE-OLD после него (то есть пункты 4-7). Вот записи в логах этой задачи:

Code: Select all
00:00:05 2108 TASK: CEAPP_FULL_backup
00:00:05 2108 Start: D:\Scripts\FULLBackup.cmd 2012-07-24 C:\WINDOWS\TEMP\FullBackup.log
00:09:50 2108 Start result: 0
00:16:25 2108 Start: "C:\Program Files\WinRAR\rar.exe" a -s CEAPP_2012-07-23_FULL.rar CEAPP_2012-07-23_FULL.bak
00:53:57 2108 Start result: 0
00:53:58 2108 Start: "C:\Program Files\WinRAR\rar.exe" a -s CEAPP_2012-07-23_TLOG.rar CEAPP_2012-07-23_TLOG.bak
00:56:07 2108 Start result: 0


Ещё раз повторюсь. Скорее всего, я неоптимально построил скрипт, плохо разобравшись в философии nncron'а, однако обнаружить свои ошибки никак не могу.

С уважением.
Kobold
 
Posts: 9
Joined: Mon, 23 Jul 2012, 17:04

Re: Задача не отрабатывает полностью.

Postby VoidVolker » Tue, 24 Jul 2012, 12:34

http://www.nncron.ru/download/nncron193b10.exe

Судя по всему крон не может найти сетевой путь. Фаервол настроен? Для начала следует попробовать просто переместить или удалить какой-то определенный файл.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Задача не отрабатывает полностью.

Postby Kobold » Tue, 24 Jul 2012, 12:47

VoidVolker wrote:http://www.nncron.ru/download/nncron193b10.exe

Судя по всему крон не может найти сетевой путь. Фаервол настроен? Для начала следует попробовать просто переместить или удалить какой-то определенный файл.


Спасибо за последнюю бету и за столь оперативный ответ. Файрвола между этими хостами нет - доступ на шару свободный (для данного пользователя). Первый оператор копирования без проблем отрабатывает:

Code: Select all
\ Копирование бэкапа на сетевой ресурс
FILE-COPY: "D:\MSSQL.1\MSSQL\Backup\CEAPP_%YYYY%-%MM%-%DD%_FULL.bak" "\\CEFILES.Backend\BACKUP$\Daily\SQL01\"


А вот всё что после сжатия RAR'ом - не отрабатывает. Впрочем, проверю, может под бета10 всё работает. Вроде бы нашёл ещё одну ошибку:

Code: Select all
RE-MATCH: "%FOUND-FILENAME%" "/(.*)\.bak/i"
        IF 
.....
          \ Перемещение сжатого файла на файловый сервер
          FILE-MOVE: "%$1%.rar" "\\CEFILES.Backend\BACKUP$\Daily\SQL01\" 
.....
        THEN

В $1 сохраняется часть краткого имени файла (без расширения), и она же используется в FILE-MOVE, хотя, наверное, нужно указывать полное имя файла - директива Start-In работает только для START-APPW в данном случае.

А можно ли как-то сделать, чтобы он об ошибках (или успехе) FILE-MOVE, FILE-DELETE и прочих операторов куда-нибудь писал (в тот же лог, например)?

P.S. Простое пожелание для улучшения. Было бы неплохо поместить раздел с бета-версиями куда-нибудь на видное место, так как найти их сходу нелегко (только ковыряться на форуме в поисках ссылок). Если, конечно, нет важных причин эти беты не выкладывать на видное место.
Kobold
 
Posts: 9
Joined: Mon, 23 Jul 2012, 17:04

Re: Задача не отрабатывает полностью.

Postby Morituruz » Tue, 24 Jul 2012, 13:04

Kobold wrote:А можно ли как-то сделать, чтобы он об ошибках (или успехе) FILE-MOVE, FILE-DELETE и прочих операторов куда-нибудь писал (в тот же лог, например)?

Для этого есть слово GetLastError
http://nncron.ru/help/RU/commands/files.htm#FILEDELETE

Вот тут, как мне кажется, RE-MATCH лишнее:
Code: Select all
     \ Обработка вчерашних бэкапов
      FOR-FILES: "D:\MSSQL.1\MSSQL\Backup\CEAPP_%YTD ASCIIZ>%*.bak"

        \ Регулярное выражение, которое вычленяет из файла его имя без расширения
        RE-MATCH: "%FOUND-FILENAME%" "/(.*)\.bak/i"
        IF

          \ Сжатие архиватором
          StartIn: "D:\MSSQL.1\MSSQL\Backup"
          NormalPriority AsService
          START-APPW: "C:\Program Files\WinRAR\rar.exe" a -s %$1%.rar %FOUND-FILENAME%

          \ Перемещение сжатого файла на файловый сервер
          FILE-MOVE: "%$1%.rar" "\\CEFILES.Backend\BACKUP$\Daily\SQL01\"

          \ Удаление несжатого вчерашнего бэкапа на файловом сервере
          FILE-DELETE: "\\CEFILES.Backend\BACKUP$\Daily\SQL01\%FOUND-FILENAME%"

        THEN
      ;FOR-FILES

если хочется обрезать расширение у файла (сократить на 4 символа), можно делать так:
Code: Select all
FOUND-FULLPATH 4 -
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Задача не отрабатывает полностью.

Postby Kobold » Tue, 24 Jul 2012, 14:25

Moriturus wrote:Вот тут, как мне кажется, RE-MATCH лишнее:
если хочется обрезать расширение у файла (сократить на 4 символа), можно делать так:
Code: Select all
FOUND-FULLPATH 4 -


Я плохо разбираюсь в синтаксисе Форта. Проверьте, пожалуйста, вот так будет правильно?

Code: Select all
START-APPW: "C:\Program Files\WinRAR\rar.exe" a -s %FOUND-FILENAME 4 -%.rar %FOUND-FILENAME%
Kobold
 
Posts: 9
Joined: Mon, 23 Jul 2012, 17:04

Re: Задача не отрабатывает полностью.

Postby Morituruz » Tue, 24 Jul 2012, 15:16

Да, правильно. FOUND-FULLPATH выдаёт строку, т.е. на самом деле два числа: адрес и длину. Например 2838282 и 17. Вот из 17 вычитаем 4 получаем 2828282 и 13, т.е. последние 4 символа «не считается».
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Задача не отрабатывает полностью.

Postby SeMa » Tue, 24 Jul 2012, 16:18

Moriturus wrote:если хочется обрезать расширение у файла (сократить на 4 символа), можно делать так:...

Когда-то Николас предложил универсальное слово.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Задача не отрабатывает полностью.

Postby Kobold » Wed, 25 Jul 2012, 13:04

Обновил ннКрон до 193b10, сделал правки соответственно данным рекомендациям - всё заработало. Сегодня задачи отработали штатно, как положено.
Всем большое спасибо за помощь.

Разработчикам сего замечательного планировщика настоятельно рекомендую поместить ссылку на 193 бета 10 в основной раздел Downloads (если нет причин бету прятать от восторженной публики).

Ещё раз большое спасибо.

P.S. Форт в качестве языка скриптов, конечно, сложноват.
Kobold
 
Posts: 9
Joined: Mon, 23 Jul 2012, 17:04


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests