Имя: Пароль:
IT
Админ
скрипт для бэкапа 1с
,
0 1сПупс
 
01.06.17
08:03
добрый день!
пользовался кобиан бэкап, периодически вылетает. Пробовал Directory Backuper - вообще полная ерунда, не бэкапит. файлы по 0 байт в архиве https://s.mail.ru/DKgX/9ahdvN6wq

написал скрипт (с хабра подправил):
SETLOCAL enabledelayedexpansion

rem Глубина архивации (количество последних архивов, которые должны быть сохранены)
SET ArcDepth=7

rem Путь к каталогу, в который будут складываться резервные копии
SET DirName=Y:\backup\77
rem Путь к каталогу с новым бэкапом (%DATE: =0% %TIME: =0% - замена пробелов в %DATE% и %TIME% на нули)
FOR /f "tokens=1-7 delims=/-:., " %%a IN ("%DATE: =0% %TIME: =0%") do (
    SET NewBkDir=%DirName%\%%c.%%b.%%a_%%d.%%e.%%f.%%g
)
rem Путь к лог-файлу
SET LogFile=%DirName%\log.LOG

ECHO ***** НАЧАЛО %DATE% %TIME% ***** >> "%LogFile%"

IF NOT EXIST "%DirName%" (
    MD "%DirName%"
    ECHO "%DirName%" - создан >> "%LogFile%"
)

ECHO Создание нового каталога для бэкапа: >> "%LogFile%"
IF NOT EXIST "%NewBkDir%" (
    MD "%NewBkDir%"
    ECHO "%NewBkDir%" - создан >> "%LogFile%"
) ELSE (
    ECHO "%NewBkDir%" - существовал ранее >> "%LogFile%"
)

rem Блок создания новой резервной копии
SET SrcData=D:\server\1S77\
SET ArcName=%NewBkDir%\test.rar
ECHO Архивация "%SrcData%" с помощью RAR >> "%LogFile%"
rar a -m5 -md4096 -ep1 -ri1 -dh -ilog"%LogFile%" "%ArcName%" "%SrcData%"

rem Соблюдение глубины архивации (должны остаться только последние %ARCDEPTH% каталогов)
ECHO Удаление старых бэкапов: >> "%LogFile%"
SET Index=0
rem DIR /AD /B /O-D "%DirName%" - получение упорядоченного по дате списка каталогов, начиная с самых новых
FOR /f "tokens=1" %%i IN ('DIR /AD /B /O-D "%DirName%"') DO (
    rem Первые %ArcDepth% архивов пропускаем, остальные удаляем
    SET /a Index+=1
    IF !Index! LEQ %ArcDepth% (
        echo "%DirName%\%%i" - оставлен >> "%LogFile%"
    ) else (
        RMDIR /S/Q "%DirName%\%%i"
        echo "%DirName%\%%i" - удален >> "%LogFile%"
    )
)

ECHO ***** КОНЕЦ %DATE% %TIME%  ***** >> "%LogFile%"
ECHO. >> "%LogFile%"
ECHO. >> "%LogFile%"

pause



почему-то нет вложенных папок в архиве. Может кто пособит?
1 1сПупс
 
01.06.17
09:10
ап
2 Андрюха
 
01.06.17
09:19
Добавь ключ winrar -R - рекурсивно с вложенными папками
3 Доминошник
 
01.06.17
09:23
4 АнтонБ
 
01.06.17
10:32
(0) такие бекапы будут битые.
Если в это время открыт 1с.
Так как в файл 1с пишет изменения не сразу.
Кеширует.
Нужно средствами 1с либо средствами sql сервера.

А это профанация.
5 АнтонБ
 
01.06.17
10:33
(0) Запусти переповедение и забекапь этим скриптом в процессе.
6 1сПупс
 
01.06.17
10:34
(5) у меня 7.7 файловая
7 lodger
 
01.06.17
10:35
(4) 1с не рекомендует средствами 1с делать бекапы, только для развертки в других форматах и для тестирования.
(6) ты же проверяешь, что в 1с никто не сидит?
8 Feunoir
 
01.06.17
10:36
(0) Возьми Effector Saver. Для 1С ничего больше и не нужно.
9 АнтонБ
 
01.06.17
11:03
(7) Он как раз читает открытые для записи файлы.
Тойесть - не проверяет
10 1сПупс
 
01.06.17
11:06
(7) не не проверяю, это ночью делается
11 SunFox
 
01.06.17
11:07
Если не XP, то вот это лучше https://www.veeam.com/ru/windows-endpoint-server-backup-free.html.
12 Йохохо
 
01.06.17
11:09
(0) лучше починить кобиан, например завести для него учетку с правами админа. Скрипт мистаматофильтр и без теневой копии нафиг не нужен, тем более для 7.7 с ее блокировками просто при открытии списка баз
13 Vladal
 
01.06.17
11:09
Как вариант - моя поделка в далёком 2007 году
http://catalog.mista.ru/public/14958/
14 DJ Anthon
 
01.06.17
11:51
echo off
Setlocal EnableDelayedExpansion
set base=%1%
if NOT DEFINED base echo Утилита архивирования 3.4 баз данных 1С 7.7 и 8.x by Anthon(tm) Software(r) 2016
if NOT DEFINED base echo ======================== ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ =================================
if NOT DEFINED base echo Backup BaseName
if NOT DEFINED base echo Backup BaseName /F c:\1SBases\BaseName d:\1SBases\1SUS\Archive
if NOT DEFINED base echo Backup BaseName /F c:\1SBases\BaseName d:\1SBases\1SUS\Archive User
if NOT DEFINED base echo Backup BaseName /F c:\1SBases\BaseName d:\1SBases\1SUS\Archive User Pass
if NOT DEFINED base echo Backup BaseName /F \\SERVER\BaseName \\SERVER\Archive User Pass C:\BIN\1cv7s.exe C:\WinRAR\WinRAR.exe
if NOT DEFINED base echo Backup BaseName /S SERVER\BaseName d:\1SBases\Archive
if NOT DEFINED base echo =
if NOT DEFINED base echo ================================ ВНИМАНИЕ =======================================
if NOT DEFINED base echo Для использования автоматического закрытия процессов 1С 8.х в серверном вариантедобавьте в файл c:\ProgramData\1C\1CEStart\1CEStart.cfg путь к файлу общих баз
if NOT DEFINED base echo CommonInfoBases=C:\ProgramData\1C\1CEStart\common.v8i
if NOT DEFINED base echo =
if NOT DEFINED base echo ============================ ИСТОРИЯ ВЕРСИЙ ====================================
if NOT DEFINED base echo 3.4 (31.08.2016): Исправлен баг с поиском процессов серверных баз 1cv82/1cv8.
if NOT DEFINED base echo ================================================================================
if NOT DEFINED base pause
if NOT DEFINED base exit

set mode=%2%
if NOT DEFINED mode echo Не указано, файловая или серверная база, принята как файловая по умолчанию.
if NOT DEFINED mode set mode=/F

set bp=%3%
if NOT DEFINED bp echo Не указан путь к базе! Путь принят по умолчанию (D:\1SBases\%base%)
if NOT DEFINED bp if %mode%==/F (set bp=D:\1SBases\%base%) else set bp=SERVER\%base%

set ap1=%4%
if NOT DEFINED ap1 echo Не указан путь архивации! Путь принят по умолчанию (D:\1SBases\Archive)
if NOT DEFINED ap1 set ap1=D:\1SBases\1SUS\Archive

set user=%5%

set fuck=%6%

set pathWinRAR=%8%
if NOT DEFINED pathWinRAR set pathWinRAR="C:\Program Files\WinRAR\WinRAR.exe"

set path1c7=%7%
if NOT DEFINED path1c7 set path1c7="C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe"
if not exist %path1c7% set path1c7="C:\Program Files\1Cv77\BIN\1cv7s.exe"
set path1c8="c:\Program Files\1cv8\common\1cestart.exe"
if not exist %path1c8% set path1c8="c:\Program Files (x86)\1cv8\common\1cestart.exe"
if not exist %path1c8% set path1c8="c:\Program Files\1cv82\common\1cestart.exe"
if not exist %path1c8% set path1c8="c:\Program Files (x86)\1cv82\common\1cestart.exe"

set longtime=%time:~0,8%
set t=%longtime: =0%
set t=%t::=%

reg QUERY "HKU\S-1-5-18\Software\Sysinternals\Handle" /v EulaAccepted >> nul 2>>nul
if NOT ERRORLEVEL 1 goto readyreg
echo Настройка реестра...
reg QUERY "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" /f
reg QUERY "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" /v TipOfTheDayGlobal >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" /v TipOfTheDayGlobal /t REG_SZ /d "0" /f
reg QUERY "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB\Anthon" >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB\Anthon"
reg QUERY "HKCU\Control Panel\Desktop" >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKCU\Control Panel\Desktop" /f
reg QUERY "HKCU\Control Panel\Desktop" /v AutoEndTasks >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKCU\Control Panel\Desktop" /v AutoEndTasks /t REG_SZ /d "1" /f
reg QUERY "HKCU\Software\Sysinternals\Handle" >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKCU\Software\Sysinternals\Handle" /f
reg QUERY "HKCU\Software\Sysinternals\Handle" /v EulaAccepted >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKCU\Software\Sysinternals\Handle" /v EulaAccepted /t REG_DWORD /d 1 /f
reg QUERY "HKU\S-1-5-18\Software\Sysinternals\Handle" >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKU\S-1-5-18\Software\Sysinternals\Handle" /f
reg QUERY "HKU\S-1-5-18\Software\Sysinternals\Handle" /v EulaAccepted >> nul 2>>nul
if ERRORLEVEL 1 reg ADD "HKU\S-1-5-18\Software\Sysinternals\Handle" /v EulaAccepted /t REG_DWORD /d 1 /f
:readyreg

set ap1=%ap1%\%base%
echo Поиск пути архивации %ap1%\...
if not exist %ap1% (md %ap1%)
if not exist %ap1% echo Не удалось найти путь архивации, упаковка прекращена.
if not exist %ap1% ping -n 10 127.0.0.1 > nul
if not exist %ap1% goto end

echo Удаляем старые архивы, кроме последнего...
if exist %ap1%\*.zip if exist %ap1%\*.old del %ap1%\*.old
for /R %ap1%\ %%i in (*.zip) DO (
ren %%~dpi%%~nxi %%~nxi.old
if exist %ap1%\*.zip (del %%~dpi%%~nxi.old) else ren %%~dpi%%~nxi.old %%~ni.old
)

if exist %ap1%\*.rar if exist %ap1%\*.old del %ap1%\*.old
for /R %ap1%\ %%i in (*.rar) DO (
ren %%~dpi%%~nxi %%~nxi.old
if exist %ap1%\*.rar (del %%~dpi%%~nxi.old) else ren %%~dpi%%~nxi.old %%~ni.old
)

if exist %ap1%\*.dt if exist %ap1%\*.old del %ap1%\*.old
for /R %ap1%\ %%i in (*.dt) DO (
ren %%~dpi%%~nxi %%~nxi.old
if exist %ap1%\*.dt (del %%~dpi%%~nxi.old) else ren %%~dpi%%~nxi.old %%~ni.old
)

echo Анализ %bp%\...
if %mode%==/S echo Обнаружена серверная база 1С 8, попытка выгрузки...
if %mode%==/S goto v8s
if exist %bp%\1Cv8.1CD echo Обнаружена файловая база 1С 8, попытка выгрузки...
if exist %bp%\1Cv8.1CD goto v8f
if exist %bp%\1cv7.md echo Обнаружена файловая база 1С 7.7, попытка выгрузки...
if exist %bp%\1cv7.md goto v77
if exist %pathWinRAR% echo Упаковка каталога с помощью WinRAR...
if exist %pathWinRAR% goto RAR
goto end

:v77
echo [General] > %ap1%\%base%.dat
echo UnloadData=Y >> %ap1%\%base%.dat
echo AutoExchange=N >> %ap1%\%base%.dat
echo Output=%ap1%\(%base%)%DATE%-%t%.txt >> %ap1%\%base%.dat
echo [UnloadData] >> %ap1%\%base%.dat
echo UnloadToFile=%ap1%\(%base%)%DATE%-%t%.zip >> %ap1%\%base%.dat
rem echo Password=123456789 >> %ap1%\%base%.dat

if exist %bp%\MD_CHANGER\md_changer.ini ren %bp%\MD_CHANGER\md_changer.ini md_changer!.ini
if exist %ap1%\%base%.zip del %ap1%\%base%.zip
if exist %ap1%\%base%err.txt del %ap1%\%base%err.txt
echo Выгрузка базы %base% в файл %ap1%\%base%.zip
if not exist %ap1%\Logs md %ap1%\Logs
if exist %ap1%\*.txt move %ap1%\*.txt %ap1%\Logs
if exist %ap1%\*.zip ren %ap1%\*.zip *.old
if exist %ap1%\*.rar ren %ap1%\*.rar *.old
if exist %ap1%\Logs\*.txt xcopy %ap1%\Logs\*.txt %ap1%\Logs\*.old /Y
if exist %ap1%\Logs\*.txt del %ap1%\Logs\*.txt /Q

set lock=1Cv7.lck
echo Проверка на наличие запущенных экземпляров программы 1С 7.7...
if exist %bp%\%lock% del %bp%\%lock% /Q
ping -n 2 127.0.0.1 > nul
if not exist %bp%\%lock% goto ready7
echo Отправка процессам 1С команду на закрытие...
handle %bp%\%lock% > pids.txt
set was=
for /F "tokens=3 skip=5" %%i in (pids.txt) do (
if NOT %%i == !was! taskkill /PID %%i /T
set was=%%i
)
echo Ожидание 90 секунд закрытия процессов 1C...
ping -n 90 127.0.0.1 > nul
if not exist %bp%\%lock% goto ready7
echo Закрытие зависших процессов 1C...
handle %bp%\%lock% > pids.txt
set was=
for /F "tokens=3 skip=5" %%i in (pids.txt) do (
if NOT %%i == !was! taskkill /F /PID %%i /T
set was=%%i
)
if exist %bp%\%lock% del %bp%\%lock%

:ready7
if exist pids.txt del pids.txt

if DEFINED user set user=/N%user%
if DEFINED fuck set fuck=/P%fuck%
if exist %path1c7% (%path1c7% config /m /D%bp% %user% %fuck% /@%ap1%\%base%.dat)
if exist %bp%\MD_CHANGER\md_changer!.ini ren %bp%\MD_CHANGER\md_changer!.ini md_changer.ini
rem if exist %ap1%\*.txt move %ap1%\*.txt %ap1%\Logs

if exist %ap1%\%base%.dat del %ap1%\%base%.dat

if not exist %ap1%\(%base%)%DATE%-%t%.zip echo Не удалось выгрузить базу %base%. Возможно, не закрыты все подключения к ней. Упаковываем каталог с базой целиком....
if not exist %ap1%\(%base%)%DATE%-%t%.zip ping -n 5 127.0.0.1 > nul
if exist %ap1%\(%base%)%DATE%-%t%.zip echo Выгрузка успешно завершена!
if exist %ap1%\(%base%)%DATE%-%t%.zip ping -n 2 127.0.0.1 > nul
if exist %ap1%\(%base%)%DATE%-%t%.zip goto add
goto wrong

:v8s

set cfgpath=c:\ProgramData\1C\1CEStart\1CEStart.cfg
if not exist %cfgpath% (
echo Не найден файл настроек 1С %cfgpath%) & (goto ready8)
TYPE %cfgpath% > 1CEStart.txt

for /F %%i in (1CEStart.txt) do set %%i
del 1CEStart.txt
if NOT DEFINED CommonInfoBases (
echo Не указан путь к файлу общих баз в файле настроек 1С %cfgpath%) & (goto ready8)
if not exist %CommonInfoBases% (
echo Не найден файл общих баз 1С %CommonInfoBases%) & (goto ready8)

TYPE %CommonInfoBases% > common.txt

rem for /F %%i in (common.txt) do set %%i

set foundbase=0
set foundsql=0
for /F %%i in (common.txt) do (
set full=%%i
set cut=!full:%base%=!
if NOT !full! == !cut! set foundbase=1
set cut=!full:Ref=!
if NOT !full! == !cut! set foundsql=1
set cut=!full:ID=!
if NOT !full! == !cut! if !foundbase!==1 if !foundsql!==1 set %%i
if NOT !full! == !cut! set foundbase=0
if NOT !full! == !cut! set foundsql=0
)

del common.txt

if NOT DEFINED ID (
echo Не найдено базы 1С с наименованием %base% в файле %CommonInfoBases%) & (goto ready8)

for /d %%B in (%SystemDrive%\Users\*) do (
set lck="%%B\AppData\Roaming\1C\1Cv82\%ID%\1Cv8.lck"

if exist !lck! del !lck! /Q >> nul 2>>nul
if exist !lck! echo Найден процесс 1С в каталоге %%B, отправка команды закрытия...
if exist !lck! handle !lck! > pids.txt
if exist !lck! for /F "tokens=1,2 skip=5 eol=t delims=:omt" %%i in (pids.txt) do taskkill /PID %%j /T
if exist !lck! del !lck! /Q >> nul 2>>nul
if exist !lck! echo Ожидание закрытия процессов 1C, максимум 10 с...
for /L %%A in (0,1,10) do (
    if exist !lck! del !lck! /Q >> nul 2>>nul
    if exist !lck! ping -n 2 127.0.0.1 > nul
)
if exist !lck! del !lck! /Q >> nul 2>>nul
if exist !lck! echo Принудительное закрытие зависших процессов 1C...
if exist !lck! handle !lck! > pids.txt
if exist !lck! for /F "tokens=1,2 skip=5 eol=t delims=:omt" %%i in (pids.txt) do taskkill /F /PID %%j /T
if exist !lck! echo Ожидание закрытия зависших процессов 1C, максимум 5 с...
for /L %%A in (0,1,5) do (
    if exist !lck! del !lck! /Q >> nul 2>>nul
    if exist !lck! ping -n 2 127.0.0.1 > nul
)
if exist !lck! del !lck! /Q >> nul 2>>nul
if exist !lck! echo Невозможно закрыть процесс, заблокировавший файл !lck!
)

rem Повторение - мать заикания.

for /d %%B in (%SystemDrive%\Users\*) do (
set lck="%%B\AppData\Roaming\1C\1Cv8\%ID%\1Cv8.lck"

if exist !lck! del !lck! /Q >> nul 2>>nul
if exist !lck! echo Найден процесс 1С в каталоге %%B, отправка команды закрытия...
if exist !lck! handle !lck! > pids.txt
if exist !lck! for /F "tokens=1,2 skip=5 eol=t delims=:omt" %%i in (pids.txt) do taskkill /PID %%j /T
if exist !lck! del !lck! /Q >> nul 2>>nul
if exist !lck! echo Ожидание закрытия процессов 1C, максимум 10 с...
for /L %%A in (0,1,10) do (
    if exist !lck! del !lck! /Q >> nul 2>>nul
    if exist !lck! ping -n 2 127.0.0.1 > nul
)
if exist !lck! del !lck! /Q >> nul 2>>nul
if exist !lck! echo Принудительное закрытие зависших процессов 1C...
if exist !lck! handle !lck! > pids.txt
if exist !lck! for /F "tokens=1,2 skip=5 eol=t delims=:omt" %%i in (pids.txt) do taskkill /F /PID %%j /T
if exist !lck! echo Ожидание закрытия зависших процессов 1C, максимум 5 с...
for /L %%A in (0,1,5) do (
    if exist !lck! del !lck! /Q >> nul 2>>nul
    if exist !lck! ping -n 2 127.0.0.1 > nul
)
if exist !lck! del !lck! /Q >> nul 2>>nul
if exist !lck! echo Невозможно закрыть процесс, заблокировавший файл !lck!
)

goto ready8

:v8f

set lock=1Cv8tmp.1CL
if not exist %bp%\%lock% goto ready8
if exist %bp%\%lock% del %bp%\%lock% /Q >> nul 2>>nul
if not exist %bp%\%lock% goto ready8
echo Отправка процессам 1С команду на закрытие...
handle "%bp%\%lock%" > pids.txt
set was=
for /F "tokens=3 skip=5" %%i in (pids.txt) do (
if NOT %%i == !was! taskkill /PID %%i /T
set was=%%i
)
if exist %bp%\%lock% echo Ожидание закрытия процессов 1C, максимум 10 с...
for /L %%A in (0,1,10) do (
    if exist %bp%\%lock% del %bp%\%lock% /Q >> nul 2>>nul
    if exist %bp%\%lock% ping -n 2 127.0.0.1 > nul
)

if not exist %bp%\%lock% goto ready8

echo Закрытие зависших процессов 1C...
handle "%bp%\%lock%" > pids.txt
set was=
for /F "tokens=3 skip=5" %%i in (pids.txt) do (
if NOT %%i == !was! taskkill /F /PID %%i /T
set was=%%i
)

if exist %bp%\%lock% echo Ожидание закрытия зависших процессов 1C, максимум 5 с...
for /L %%A in (0,1,5) do (
    if exist %bp%\%lock% del %bp%\%lock% /Q >> nul 2>>nul
    if exist %bp%\%lock% ping -n 2 127.0.0.1 > nul
)

:ready8
if exist pids.txt del pids.txt /Q

if not exist %ap1%\Logs md %ap1%\Logs
if exist %ap1%\*.txt move %ap1%\*.txt %ap1%\Logs
if exist %ap1%\Logs\*.txt xcopy %ap1%\Logs\*.txt %ap1%\Logs\*.old /Y
if exist %ap1%\Logs\*.txt del %ap1%\Logs\*.txt /Q
if exist %ap1%\*.dt ren %ap1%\*.dt *.old
if exist %ap1%\*.rar ren %ap1%\*.rar *.old

echo Попытка выгрузить базу %bp% в файл
echo    %ap1%\(%base%)%DATE%-%t%.dt
if DEFINED user set user=/N"%user%"
if DEFINED fuck set fuck=/P%fuck%
%path1c8% CONFIG %mode% %bp% %user% %fuck% /DumpIB"%ap1%\(%base%)%DATE%-%t%.dt"
if exist %ap1%\*.txt move %ap1%\*.txt %ap1%\Logs
ping -n 15 127.0.0.1 > nul

:wait
ping -n 5 127.0.0.1 > nul
if exist %ap1%\(%base%)%DATE%-%t%.dt goto last
if exist %ap1%\(%base%)%DATE%-%t%.n1 echo Выгрузка в процессе (n1)...
if exist %ap1%\(%base%)%DATE%-%t%.n1 goto wait

:last
if not exist %ap1%\(%base%)%DATE%-%t%.dt if not exist %ap1%\(%base%)%DATE%-%t%.n1 goto wrong
ren %ap1%\(%base%)%DATE%-%t%.dt (%base%)%DATE%-%t%.dt1 >> nul 2>>nul
if not exist %ap1%\(%base%)%DATE%-%t%.dt1 echo Выгрузка в процессе (dt)...
if not exist %ap1%\(%base%)%DATE%-%t%.dt1 goto wait
ren %ap1%\(%base%)%DATE%-%t%.dt1 (%base%)%DATE%-%t%.dt >> nul 2>>nul
if %mode%==/S goto end
goto add

:wrong
if exist %bp% echo Не удалось запустить архивирование через Конфигуратор 1С. Аварийная архивация с помощью WinRAR...
if exist %bp% goto RAR
if not exist %bp% goto end

:add
if exist %bp% echo Дополнительная архивация с помощью WinRAR...
if exist %bp% goto RAR
if not exist %bp% goto end

:RAR
if not exist %ap1%\Logs md %ap1%\Logs
if exist %ap1%\*.rar del %ap1%\*.rar /Q
%pathWinRAR% a -y -dh -ibck -ilog%ap1%\(%base%)%DATE%-%t%.txt -r %ap1%\(%base%)%DATE%-%t%.rar -m1 %bp% -x1Cv7.LCK

:end
echo Архивация завершена. Anthon(tm) Software(r) 2016
ping -n 2 127.0.0.1 > nul
15 DJ Anthon
 
01.06.17
11:54
пример батника для этого файла
echo off
e:
cd e:\1SBases\1SUS\Archive
call Backup.bat BudgetHRM /F e:\1SBases\BudgetHRM e:\1SBases\1SUS\Archive Архивация Пароль
call Backup.bat StateAccounting /S SERVER-8R2\StateAccounting e:\1SBases\1SUS\Archive Архивация Пароль
cls
16 DJ Anthon
 
01.06.17
11:58
нужен еще файл handle.exe от sysinternals, чтобы киллить процессы 1Ски, незакрытые юзерами в терминале, да и просто зависшие или забытые. первый запуск батника надо сделать под админскими правами, чтобы в реестре внеслись небольшие правки для управления конфигуратором в пакетном режиме. старые архивы удаляются, оставляется только один, кроме этого, все пакуется раром на всякий случай. а уже каталог можно гудсинком сбрасывать на фтп, чтобы защититься от шифрователей. все просто и работает как часы уже больше года.
17 DJ Anthon
 
01.06.17
12:00
спасибо Abrahams за подкинутые идеи
18 Лефмихалыч
 
01.06.17
12:03
обдолбатники... фу...
19 arsik
 
гуру
01.06.17
12:21
(16) Вы как в 20 веке живете. Про теневые копии вы походу не в курсе.
20 Jump
 
01.06.17
12:26
(19) +1000
21 DJ Anthon
 
02.06.17
11:38
(19) в курсе, не понравились, отказался. тем более, что интернет там слабый, мне выгрузки на фтп еле-еле успевают упасть. теневые копии не получится так сделать.
22 DJ Anthon
 
02.06.17
11:39
тем более база во время работы коряво копируется, так что это заодно завершение работы юзеров в нужных базах.
23 DJ Anthon
 
02.06.17
11:40
копии томов отлично так же шифруются шифровальщиками и содержат кучу мусора.
24 arsik
 
гуру
02.06.17
11:40
(21) Какая связь между теневыми копиями и выгрузка на ФТП?
25 DJ Anthon
 
02.06.17
11:43
(24) большие сильно. в канал не пролазят
26 arsik
 
гуру
02.06.17
11:50
(25) Ты издеваешься что ли? Тебе нужна теневая копия только для того что бы из нее забэкапить свою папку с базой, что бы юзеров не выкидывать. Зачем ее всю то тащить?
Хотя бы статейку какую ни будь прочитай. Вот например https://www.osp.ru/winitpro/2007/06/4361785/ -
"важная возможность VSS — архивирование файлов, открытых или блокированных таким приложением, как Microsoft SQL Server или Microsoft Exchange."
27 arsik
 
гуру
02.06.17
11:52
+ (26) Логика такая.
Создаем теневую копию - Из нее архивируем папку с базой - Удалям теневую копию.
28 mehfk
 
02.06.17
11:59
(16) Зачем именно handle.exe? taskkill не справился?
29 DJ Anthon
 
02.06.17
12:05
(28) тасккилл там есть. handle.exe нужен, чтобы вычленять только определенные процессы 1С, чтобы не все грохать. он создает файл с айди процессов, а затем файл парсится.
(27) ну и зачем столько лишних движений?
30 mehfk
 
02.06.17
12:06
(29) Понял, отстал.
31 DJ Anthon
 
02.06.17
12:09
(26) я понял, вы к чему )) я не админ, мне платят только за 1С, так что этот скрипт - дешево и сердито. если будет необходимость, буду делать теневые копии, но очень сомневаюсь, что буду лезти туда, где все работает. и так забот хватает.
32 ildary
 
02.06.17
12:09
(0) я когда то сделал так - в сеансе самого долгоработающего пользователя вечером отлавливается полчаса покоя (idle), после чего происходит ребут компа с базой (мало ли какие процессы могут висеть) и после перезагрузки сразу стартовал архивацию (7zip) - способ работает много лет до сих пор.
33 Йохохо
 
02.06.17
12:22
(31) просто мега скрипт от мега 1сника дает низкий шанс, что бэкап рабочий
34 DJ Anthon
 
02.06.17
12:41
(33) сбоев не было. dt сам по себе ненадежный, подкрепляю винраром. а там где скуль, там есть админы, которые за ним вроде следят, но уже моя дтшка спасала как-то раз базу
35 arsik
 
гуру
02.06.17
13:37
(29) Это не "лишние движения", а сложившаяся практика.
36 1сПупс
 
13.06.17
07:34
(32) как с помощью idle отловить покой? это батничек делает?

попробовал эффектор сайвер, почему то он сохраняет только эти файлы https://s.mail.ru/Ghvn/5zRMfhK3v

разве этого достаточно?
37 1сПупс
 
13.06.17
07:54
SETLOCAL enabledelayedexpansion

rem Глубина архивации (количество последних архивов, которые должны быть сохранены)
SET ArcDepth=7

rem Путь к каталогу, в который будут складываться резервные копии
SET DirName=Y:\backup\77\
rem Путь к каталогу с новым бэкапом (%DATE: =0% %TIME: =0% - замена пробелов в %DATE% и %TIME% на нули)
FOR /f "tokens=1-7 delims=/-:., " %%a IN ("%DATE: =0% %TIME: =0%") do (
    SET NewBkDir=%DirName%\%%c.%%b.%%a_%%d.%%e.%%f.%%g
)
rem Путь к лог-файлу
SET LogFile=%DirName%\log.LOG

ECHO ***** НАЧАЛО %DATE% %TIME% ***** >> "%LogFile%"

IF NOT EXIST "%DirName%" (
    MD "%DirName%"
    ECHO "%DirName%" - создан >> "%LogFile%"
)

ECHO Создание нового каталога для бэкапа: >> "%LogFile%"
IF NOT EXIST "%NewBkDir%" (
    MD "%NewBkDir%"
    ECHO "%NewBkDir%" - создан >> "%LogFile%"
) ELSE (
    ECHO "%NewBkDir%" - существовал ранее >> "%LogFile%"
)

rem Блок создания новой резервной копии
SET SrcData=D:\WORK\1S77\
SET ArcName1=%NewBkDir%
SET ArcName2=%NewBkDir%\77.rar
ECHO Архивация "%SrcData%" с помощью RAR >> "%LogFile%"

robocopy "%SrcData%" "%ArcName1%" /e
F:\77\rar.exe a -m5 -md4096 -ep1 -ri1 -dh -df -ilog"%LogFile%" "%ArcName2%" "%ArcName1%"


rem Соблюдение глубины архивации (должны остаться только последние %ARCDEPTH% каталогов)
ECHO Удаление старых бэкапов: >> "%LogFile%"
SET Index=0
rem DIR /AD /B /O-D "%DirName%" - получение упорядоченного по дате списка каталогов, начиная с самых новых
FOR /f "tokens=1" %%i IN ('DIR /AD /B /O-D "%DirName%"') DO (
    rem Первые %ArcDepth% архивов пропускаем, остальные удаляем
    SET /a Index+=1
    IF !Index! LEQ %ArcDepth% (
        echo "%DirName%\%%i" - оставлен >> "%LogFile%"
    ) else (
        RMDIR /S/Q "%DirName%\%%i"
        echo "%DirName%\%%i" - удален >> "%LogFile%"
    )
)

ECHO ***** КОНЕЦ %DATE% %TIME%  ***** >> "%LogFile%"
ECHO. >> "%LogFile%"
ECHO. >> "%LogFile%"


логика такая:

1.делаю теневую копию
2.делаю архив из нее
3.удаляю теневую копию

еще бы грузить это на dev от яндекса.
38 1сПупс
 
13.06.17
07:55
все оттещщено работает 100%
рацпредложения поощряются
39 Jump
 
13.06.17
08:06
(37)Ужас, а не скрипт.
Во время работы скрипта пользователь перепровел пару документов и  у вас вместо архива каша.
40 Jump
 
13.06.17
08:08
(37)>>делаю теневую копию
Покажите в каком месте скрипта вы делаете теневую копию, в упор не вижу.
41 1сПупс
 
13.06.17
08:24
(39) ночью никто не спит думаете
42 1сПупс
 
13.06.17
08:24
?
43 1сПупс
 
13.06.17
08:25
robocopy это не теневая копия?
44 arsik
 
гуру
13.06.17
08:29
(43) Я тебя расстрою, но нет.
45 1сПупс
 
13.06.17
08:30
(44) а может и так норм? нет никого в базе
46 Jump
 
13.06.17
08:31
(43) робокопи это утилита для копирования файлов.

Теневая копия это мгновенный снимок состояния тома.
Нельзя сделать теневую копию файла - она делается мгновенно для всего диска.

При создании теневой копии не происходит никакого копирования.
Никуда ничего не копируется.
Просто сбрасываются буферы и создается несколько записей в файловой системе и
47 Jump
 
13.06.17
08:40
Теневую копию из скрипта можно создать например так -
vssadmin.exe create shadow /for=C:
Создаст теневую копию диска C:

vssadmin.exe List Shadows
Покажет все существующие теневые копии.

mklink /D C:\shadow  \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
Примонтирует том теневой копии \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1 в каталог C:\shadow
48 Jump
 
13.06.17
08:41
Если из интерфейса то просто в свойствах диска зайти во вкладку теневые копии, выбрать нужную и она сама примонтируется как сетевой каталог.
49 1сПупс
 
13.06.17
09:42
(48) нет вкладки теневые копии
https://s.mail.ru/EVCp/nGXDEEnWm
50 arsik
 
гуру
13.06.17
10:02
Утилита. Минимум настроек. Все что нужно делает, кроме архивации.
https://lightbackup.com/
51 arsik
 
гуру
13.06.17
10:05
(49) Вообще то это и есть теневые копии.
Проверь в командной строке "VSSAdmin List Shadows"
52 Jump
 
13.06.17
10:31
(49) На скриншоте открыта же вкладка предыдущие версии.
Сделай в командной строке под админом vssadmin.exe create shadow /for=C:
и в этой вкладке появится еще одна копия с текущим временем создания.
Программист всегда исправляет последнюю ошибку.