даты -> имена файлов

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

даты -> имена файлов

Postby Egor Trubnikov » Tue, 25 Jan 2005, 18:12

Здрасте вам.

Пытаюсь с помощью nnCron решить задачу обновления баз для KAV 5.0. ZIP-Файлы имеют вид up%YY%%MM%%DD%.zip. Причем эта комбинация переменных может указывать только на пятницу, т.е. например up050114.zip, up050121.zip и т.д.

Вообще говоря, я думаю что это дело можно разбить на две задачи.
Первая задача, запускаемая раз в месяц (или раз в пол-года, например), формирует файллист с именами всех возможных файлов на требуемый период. Т.е. количество имен в файллисте будет равно количеству пятниц в заданном интервале дат.
Вторая задача будет непосредственно загружать файлы по http, читая их имена из файллиста. Успешно скачанные файлы будут помечаться в файллисте как-нибудь, чтобы не скачивать один файл больше одного раза.

Суть вопроса в том, как проще всего сформировать файллист.
Egor Trubnikov
 
Posts: 48
Joined: Thu, 05 Aug 2004, 23:11

Postby makrus » Wed, 26 Jan 2005, 03:47

Egor Trubnikov
По-моему в данном случае можно воспользоваться несколько другим алгоритмом:
Code: Select all
#( KAV_update
Time: * * * * 5 *                       \ запускаем только по пятницам
OnceADay                                \ задача запускается только раз в день
...
Action:
...                                     \ проверяем на наличие обновления, скачиваем,
up%YY%%MM%%DD%.zip                      \ распаковываем и добавляем в базу антивируса,
...                                     \ при этом используется имя файла с
)#                                      \ "сегодняшней" пятничной датой
все познается в сравнении
makrus
 
Posts: 336
Joined: Mon, 12 Jul 2004, 14:46
Location: Волгоград

Postby Egor Trubnikov » Wed, 26 Jan 2005, 10:25

Спасибо makrus

Но, например что делать если в пятницу скачать файл не удалось, или просто надо скачать все файлы за прошлый месяц..?
Идея с файллистом, имхо, тут больше подходит.
Egor Trubnikov
 
Posts: 48
Joined: Thu, 05 Aug 2004, 23:11

Postby Egor Trubnikov » Mon, 31 Jan 2005, 13:00

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

Code: Select all
#( kav_upd
NoActive
USER-VALUE list-file
USER-VALUE list-contents
VARIABLE position
\ максимальная длина строки (в символах)
10240 CONSTANT max-line-size
\ Новое слово для поиска совпадений двух строк
: StringGetPos { a1 u1 a2 u2 -- pos}
a1 u1 a2 u2 SEARCH IF DROP a1 - 1+ ELSE 2DROP 0 THEN ;
Action:
    max-line-size ALLOCATE THROW TO list-contents
    S" filelist.txt" R/O OPEN-FILE-SHARED THROW TO list-file
    BEGIN list-contents max-line-size 2- list-file READ-LINE THROW WHILE
    list-contents + 0 SWAP C!
       list-contents ASCIIZ> S" ;" StringGetPos position !
       position S" 0" ICOMPARE
   IF
      S" http://downloads3.kaspersky-labs.com/bases/av/avc/i386_zip/%list-contents%" HTTP-GET 0=      IF
         S" %list-contents%" FWRITE
      ELSE 2DROP THEN
   ELSE
      \
   THEN

    REPEAT
    DROP
    list-file CLOSE-FILE DROP
    list-file FREE DROP
)#


по идее эта задача должна считывать filelist.txt, выбирать первую не закомментированную строку и подставлять её в слово HTTP-GET, которое скачивает соответствующий файл.
Проблема в том, что я не пойму как правильно подставить значение строковой переменной list-contents в строку :?:
Egor Trubnikov
 
Posts: 48
Joined: Thu, 05 Aug 2004, 23:11

Postby Игорь » Mon, 31 Jan 2005, 16:20

Egor Trubnikov
Я бы на твоем месте голову не ломал и доверил это дело качалке. Собственно даже в хэлпе написано "для загрузки бинарных данных лучше использовать специальные утилиты". Для планировщика лучший вариант такой утилиты - wget, остальные качки тихо курят в сторонке.
Храни zip-архивы обновлений в отдельной папке и для wget вся твоя задача будет состоять из двух строчек:

wget http://downloads3.kaspersky-labs.com/ba ... /i386_zip/
Он скачает файл index.html

wget -m --force-html -i index.html
-i index.html - значит брать урл из файла index.html
--force-html - значит рассматривать файл со списком не как текстовой, а как html-страницу, у wget своя встроенная таблица html-тегов и ссылки на *.zip он сам найдет
-m - миррор, зеркалирование. Wget будет скачивать из index.html только файлы, отсутствующие локально или если на сайте файл новее.
Там параметров побольше надо, но остальные лучше держать в файле конфигурации wgetrc, вроде dirstruct = off и т.п.

И потом натравливай на папку с zip-архивами (FOR-FILES) архиватор, например unzip.exe (http://www.info-zip.org) с параметром -u (update files, create if necessary). Или unzip.exe со списком может работать. Или WinRAR-ом. Я AVP не пользуюсь, поэтому готового варианта такой задачи у меня нет, но если почитать вдумчиво параметры комстроки качалки и архиватора, можно вполне сносную касперообновлялку для nnCron соорудить.
Игорь
 
Posts: 36
Joined: Tue, 17 Aug 2004, 02:25

Postby Egor Trubnikov » Mon, 31 Jan 2005, 16:34

Спасибо Игорь! :D Круто!
Я про wget не знал просто.
Egor Trubnikov
 
Posts: 48
Joined: Thu, 05 Aug 2004, 23:11

Postby Игорь » Tue, 01 Feb 2005, 00:16

А кстати, почему ты написал, что файлы все пятничные? По тому адресу только avp0501.zip(за весь месяц надо полагать) и daily.zip лежат. Никаких up050107.zip или up050114.zip вроде нет.
Игорь
 
Posts: 36
Joined: Tue, 17 Aug 2004, 02:25

Postby Egor Trubnikov » Tue, 01 Feb 2005, 09:36

Буквально три дня назад там была куча файлов: кумулятивное обновление за сентябрь и еженедельные обновления вплоть до середины января. Раз в несколько месяцев они всё это сводят в один кумулятивный архив. Так что проще всего будет зеркалить всё содержимое ftp://downloads3.kaspersky-labs.com/bas ... /i386_zip/
Egor Trubnikov
 
Posts: 48
Joined: Thu, 05 Aug 2004, 23:11


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests

cron