Выковал я из стали BAT-файл, да вооружил им Шедулер серверный. А файл тот был следующего содержания:
@ECHO OFF CLS SET BASE_NAME=ИмяБазыДанных SET CONNECT_STR="File=""D:1C_BaseМояБазаДанных"";" SET USER_NAME=Update SET USER_PWD=123 SET START_FILE="C:Program Files (x86)1cv828.2.19.90in1cv8.exe" SET BACKUP_DIR=D:1C_BaseetcBackup SET CF_DIR=D:1C_BaseetcUpdate SET LOG_DIR=D:1C_BaseetcUpdateLog SET UNLOCK_CODE=КодРазрешения SET CF_FILE=%CF_DIR%1Cv8.cf SET LOG_FILE=%LOG_DIR%\%BASE_NAME%_%date:~6,4%-%date:~3,2%-%date:~0,2%.log SET DUMP_FILE=%BACKUP_DIR%\%BASE_NAME%_%date:~6,4%-%date:~3,2%-%date:~0,2%.dt IF NOT EXIST %CF_FILE% EXIT ECHO --- Start the update %DATE% %TIME% --- ECHO --- Start the update %DATE% %TIME% --- >> %LOG_FILE% ECHO. ECHO. >> %LOG_FILE% ECHO --- Completion of the inactive terminal sessions --- ECHO --- Completion of the inactive terminal sessions --- >> %LOG_FILE% tskill *1cv8* /a /v @ECHO. @ECHO. >> %LOG_FILE% ECHO --- Shutdown users --- ECHO --- Shutdown users --- >> %LOG_FILE% START "" /wait %START_FILE% ENTERPRISE /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /DisableStartupMessages /CЗавершитьРаботуПользователей /Out%LOG_FILE% -NoTruncate ECHO. ECHO. >> %LOG_FILE% IF EXIST %DUMP_FILE% GOTO NO_BACKUP ECHO --- Creating a backup --- ECHO --- Creating a backup --- >> %LOG_FILE% ECHO Backup file: %DUMP_FILE% ECHO Backup file: %DUMP_FILE% >> %LOG_FILE% START "" /wait %START_FILE% DESIGNER /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /UC%UNLOCK_CODE% /DumpIB%DUMP_FILE% /Out%LOG_FILE% -NoTruncate ECHO. ECHO. >> %LOG_FILE% :NO_BACKUP ECHO --- Configuration update --- ECHO --- Configuration update --- >> %LOG_FILE% ECHO Update file: %CF_FILE% ECHO Update file: %CF_FILE% >> %LOG_FILE% START "" /wait %START_FILE% DESIGNER /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /UC%UNLOCK_CODE% /LoadCfg%CF_FILE% -WarningsAsErrors /Out%LOG_FILE% -NoTruncate ECHO. ECHO. >> %LOG_FILE% ECHO --- Information base update --- ECHO --- Information base update --- >> %LOG_FILE% START "" /wait %START_FILE% DESIGNER /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /UC%UNLOCK_CODE% /UpdateDBCfg -WarningsAsErrors /Out%LOG_FILE% -NoTruncate ECHO. ECHO. >> %LOG_FILE% ECHO --- Unlock database --- ECHO --- Unlock database --- >> %LOG_FILE% START "" /wait %START_FILE% ENTERPRISE /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /DisableStartupMessages /CРазрешитьРаботуПользователей /UC%UNLOCK_CODE% /Out%LOG_FILE% -NoTruncate ECHO. ECHO. >> %LOG_FILE% ECHO --- End of update %DATE% %TIME% --- ECHO --- End of update %DATE% %TIME% --- >> %LOG_FILE% ECHO. ECHO. >> %LOG_FILE% PAUSEBASE_NAME — Имя базы данных, используется в наименовании лог-файлов и файлов резервных копий.
CONNECT_STR — строка подключения к информационной базе. В случае файлового варианта должна выглядить так «File=»»D:1C_BaseМояБазаДанных»»;» (обратите внимание на двойные кавычки). Для клиент-серверного варината «Srvr=»»ИмяСервера»»;Ref=»»МояБазаДанных»»;».
USER_NAME и USER_PWD — Соответственно логин и пароль пользователя под которым делается обновление. Полные права давать не обязательно, в типовых конфигурациях достаточно права администрирования.
START_FILE — Путь к программе 1С:Предприятие. Следует обратить внимание на то, что нужно обращаться к конкретному релизу (например, «C:Program Files (x86)1cv828.2.19.90in1cv8.exe»), а не к файлу запускатору («C:Program Files (x86)1cv82common1cestart.exe»). Дело в том, что этот файл запускает еще один новый процесс, а сам закрывается. В этом случае BAT-файл не будет дожидаться завершения каждого отдельного действия и запустить несколько версий 1С одновременно.
BACKUP_DIR — Путь для резервных копий. Имена файлов генерируются как ИмяБазыДанных_Год-Месяц-Число.
CF_DIR — Путь к файлу обновления 1Cv8.cf. Если файл в указанной директории есть, то начинается обновление, если нет — работа BAT-файла завершается.
LOG_DIR — Путь где будут храниться лог-файлы. Имена файлов генерируются как Год-Месяц-Число_ИмяБазыДанных.
Прошу прощения за английские слова. Проблема в том, что BAT-файл должен быть в кодировке 866 OEM, а лог программа 1С пишет в 1251 ANSI.
Итак, что делает скрипт.
1. Проверяет наличие файла обновления по указанному пути. Если файла нет, то скрипт завершается.
2. Убивает зависшие процессы: tskill *1cv8* /a /v
3. Завершает работу всех пользователей и блокирует базу для входа.
4. Если в текущую дату еще не делалась резерваная копия, то делает выгрузку данных.
5. Обновляет конфигурацию.
6. Обновляет информационную базы.
7. Разблокирует базу для входа пользователей.
Теперь я просто кладу вечером файл обновления в нужную папку, прихожу утром и, на всякий случай, проверяю логи, дабы убедиться, что все обновилось.
Выглядит круто 🙂
50 баз = 50 батников?
(2) mmoozzgg, изначально планировал количество батников по количеству серверов. Но в итоге, пришел к мнению, что лучше сделать отдельный батник на каждую базу. Иначе, в случае какой-либо ошибки могут не обновиться все базы. Плюс обновления нескольких баз можно запускать параллельно.
В общем-то, пути на всех серверах у меня одинаковые, поэтому созданик батника сводится к его копированию и изменению всего двух параметров: BASE_NAME и
CONNECT_STR, в редких случаях еще меняю версию в START_FILE (в идеале хочу везде обновиться до одной версии).
(0),
Не РБД ли?
(4) TMV,
Нет
Идея правтльная
К этой же теме хорошо было бы дописать удаление старых БекАпов, ибо место не резиновое. Не сталкивались с такой задачей?
Было бы интересно посмотреть на реализацию.
(7) Светлый ум, при желании и достаточном времени можно и такой задачей заняться.
Думаю ничего сложно в этом нет. Будет что-то типа (на практике не проверял):
FORFILES /P «%BACKUP_DIR%» /S /D -1 /C «CMD /C IF @ISDIR==FALSE DEL /F /Q «%BACKUP_DIR%@REALPATH»»
Теоретически этот код должен удалять все файлы старше одного дня.
Без обид, но очередной велосипед.
Батник не дает ту свободу обработки, что дает более мощный скриптовый язык 🙁
Где обработка ошибок?
Много еще граблей сломаешь на этом пути 🙁
(9) artbear, не претендую на оригинальность, ничего сложного, ничего особо нового — стандартные механизмы 1С. Но, в данный момент, эти батники меня очень спасают от рутинной работы. Если есть примеры скриптов с более богатым функционалом и обработкой ошибок, подалитесь, пожалуйста.
(10) да пожалуйста. Мне не жалко.http://infostart.ru/public/138493/ . Этими скриптами я схранял 32 базы. Половина Бухгалтерия, половина Зряплата, всё это выкладывалось на ФТП, а через 62 дня оставляло один: первый за месяц. И всё это с обработкой ошибок.
(9) artbear, сейчас пишу на JScript-е backUp + updater на основании 1С-кой обработки ОбновлениеКнфигурации. Цель: создать кроссплатформенный скрипт для автоматического архивирования и обновления нескольких 1С информационных баз (ИБ). Разработка приближается к логическому завершению через неделю. Затем тест на реальных ИБ, надеюсь к началу следующего месяца получу не только рабочую версию, но и оттестированную. Приближаясь к завершению я осознал, что скрипт на базе jscript кроссплатформенным не получится из-за отсутствия встроенных возможностей работы с XML. После отладки придется переводить на Perl. Для кроссплатформенности в Linux для замены COM они (1C-ники) разработали RAS/RAC (Remote Administratiorn Server/Remote Administration Client), а вот для конфтгураций на платформе 8.2 они уже этого делать не будут. Хорошо бы для ЗапретитьРаботуПользователей/РазрешитьРаботуПользователей имплантировать соответствующие функции web-сервиса в библиотеку стандартных подсистем (БСП), а не СОМ соединения, типа DenyUsersWork/AllowUsersWork. Но это надо просить 1С-ников тем у кого есть подписка на поддержку (ИТС). 🙁
(12) ИМХО лучше юзать 1Script, чем Perl 🙂
ХМЛ есть, работу с процессами поддерживает, ЗИП есть, много чего есть.
Мы уже много скриптов с автором Андреем (EvilBeaver) понаписали, уже в реальной эксплуатации для нескольких проектов разных команд.
Спасибо, очень помог ваш пример.
Здравствуйте ! Не обновляется конфигурация базы данных , может ли быть из за платформы 8.3.6.2100, пробывал также на 8.3.5? Не проверяли?( 6-ой пункт). Если «ручками» зайти в конфигуратор и нажать F7 ,то обновляется без проблем.
(15) Нет, у меня сейчас такой же релиз. Работает отлично. Что в лог файле? Когда обновляете по F7, предупреждений никаких нет?
Да есть одно не критичное предупреждение, из за него? Никак не обойти?
(17) Исправьте его и в следующий раз все будет работать.
Да, согласен, все сработало , спасибо !
Пожалуйста.
Автоматическое обновление нетиповой? И как это вы так автоматизировали? Он сам сравнение и объединение делает?
(21) Shaldryn,»Чукча — не читатель, чукча — писатель».
Автоматом обновляется N баз с уже подготовленным CF.
А если интересуетесь
, то вамСюда, например.
(21) Shaldryn, для обновления типовых есть другие механизмы, попроще. А здесь вы сами подготавливаете конфигурацию обновления, кладете ее в определенную папку, запускаете скрипт и он сам делает все рутинные действия по резервному копированию, обновлению и пр.