|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Virtualbox Backup задание в планировщике |
|
|
CMD/BAT - [решено] Virtualbox Backup задание в планировщике
|
Пользователь Сообщения: 77 |
Понадобилось делать еженочный бэкап виртуальных жёстких дисков виртуалбокса с особенностями:
0. скрипт должен останавливать виртуальные машину 1. скрипт будет создавать папку по указанному пути с сегодняшней датой, формата "дд_мм_гггг" 2. в эту папку он будет копировать диски виртуальных машин и сжимать их 7z 3. после окончания копирования запускать виртуальную машину 4. проверить количество папок, если их больше 7 - удалять самы 4. писать txt лог в этой же папке всего что он сделал или не сделал. У виртуалбокса есть утилита в папке с установленной программой, vboxmanage.exe Если cmd через команду "cd"(или другим неведомым мне способом) установить путь, где лежит она, ей можно пользоваться используя её аргументы. Я вижу скрипт, который нужно запихнуть в планировщик заданий windows следующим: (жирные слова - то что сделать не удалось) Скрытый текст
//начало скрипта cd "C:\Program Files\Oracle VirtualBox" //переходит в каталог с утилитой виртуалбокса vboxmanage controlvm "виртуалка1" savestate> //эта команда сохраняет текущее состояние и выключает виртуалку. Используется именно этот вариант, т.к. не всегда перезагрузка желательна. выглядит так, проценты идут в процессе сохранения:
![]() ping -n 6 127.0.0.1 >nul //на случай если слегка подвиснет при сохранении состояния. возможно есть команда ожидания конца операции, но т.к. это vboxmanage, bat это отследить вряд ли сможет. vboxmanage controlvm "виртуалка2" savestate> ping -n 6 127.0.0.1 >nul vboxmanage controlvm "виртуалка3" savestate> ping -n 6 127.0.0.1 >nul создание папки с именем-датой по пути D:\vmbackup\ VBoxManage clonemedium "исходный_путь_виртдиска\диск1.vdi" "D:\vmbackup\папка_с_датой\диск1.vdi" ожидание, пока не закончится операция. операция выглядит так, проценты идут в процессе клонирования
![]() аналогично для других виртдисков(важно отметить, их количество может меняться) vboxmanage startvm "виртуалка1" --type headless //запускает виртуалку в фоновом режиме выглядит так, ждёт пока запустится и выдаёт сообщение successfully started:
![]() ping -n 6 127.0.0.1 >nul аналогично для других виртуалок проверка скриптом количества папок и, если больше 7ми, удалять самые старые по дате архивация скопированных виртдисков(с удалением копии, с которой делался архив. Чтобы остались только архивы) //конец скрипта возможно имеет смысл выключить одну-сделать операции-включить и перейти на следующую виртуальную машину но т.к. ночь, времени много, отключать все их разом или по-очереди разницы нет. так же, клонировать диск нужно именно программой виртуалбокса, т.к. она создаёт для него уникальный номер в процессе клонирования, что позволит избежать возможные проблемы в будущем при восстановлении из бэкапа. возможно, скрипт можно сделать значительно проще. |
|
Отправлено: 17:13, 15-02-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата zegordo:
|
|
Отправлено: 17:46, 15-02-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата zegordo:
Цитата zegordo:
Цитата zegordo:
Цитата zegordo:
|
||||
Отправлено: 19:09, 15-02-2017 | #3 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Цитата alpap:
Цитата alpap:
а если нет - идти дальше по скрипту, оформив это в логе |
||
Отправлено: 19:36, 15-02-2017 | #4 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата zegordo:
for /f "delims=" %%a in ('"VBoxManage clonemedium "исходный_путь_виртдиска\диск1.vdi" "D:\vmbackup\папка_с_датой\диск1.vdi""') do echo "%%a">>"log.txt" Пути живые поставьте для проверки. |
||
Отправлено: 19:48, 15-02-2017 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата alpap:
Цитата zegordo:
|
||
Отправлено: 20:10, 15-02-2017 | #6 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Цитата Iska:
происходит просто пауза, пока не закончится операция с предыдущей, таким образом тайм ауты и пинги не нужны более того, VBoxManage.exe сам может создавать папку если её нет, таким образом cmdшная команда тоже тут не нужна. в итоге, скрипт на остановку-копию-запуск будет таким: "C:\Program Files\Oracle VirtualBox\vboxmanage.exe" controlvm "имя_виртуалки" savestate "C:\Program Files\Oracle VirtualBox\vboxmanage.exe" clonemedium "путь_к_виртдиску\имя_виртдиска.vdi" "путь_к_копии_виртдиска\%date%\имя_виртдиска.vdi" "C:\Program Files\Oracle VirtualBox\vboxmanage.exe" startvm "имя_виртуалки" --type headless //повторить для других виртуальных машин проверка скриптом количества папок в папке "D:\vmbackup" например, и, если больше 7ми, удалять самые старые по дате запись всех итогов(достаточно просто копии всех надписей что в окне cmd прошло) в лог в этой же %date% папке в txt не сработал
![]() он же, из этой же папки запущенный
![]() так же, уважаемый товарищ alpap, это, я так понимаю, запись в лог? |
|
Отправлено: 14:32, 16-02-2017 | #7 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата zegordo:
pushd "papka" for /f "skip=7 delims=" %%a in ('dir /ad/b/o-d/tc') do >nul 2>&1 rd /s /q "%%a" popd Цитата zegordo:
|
||
Отправлено: 01:39, 17-02-2017 | #8 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать на данный момент выглядит так:
# сохранение состояния вирт машины и её выключение "C:\Program Files\Oracle VirtualBox\vboxmanage.exe" controlvm "имя_вирт_машины" savestate # клонирование диска с присваиванием ему нового uuid "C:\Program Files\Oracle VirtualBox\vboxmanage.exe" clonemedium "C:\путь_к_исходному_вирт_диску\имя_вирт_диска.vdi" "C:\путь_к_папке_бэкапов\%date%\имя_вирт_диска2.vdi" # запуск виртуалки в фоновом режиме "C:\Program Files\Oracle VirtualBox\vboxmanage.exe" startvm "имя_вирт_машины" --type headless #удаление нового жёсткого диска из менеджера виртуальных носителей (во избежание огромного количества неиспользуемых копий дисков и ошибок при удалении старых) "C:\Program Files\Oracle VirtualBox\vboxmanage.exe" closemedium disk "C:\путь_к_папке_бэкапов\%date%\имя_вирт_диска2.vdi" # очистка всех папок, кроме 7 последних по дате pushd "C:\vmbackup\" for /f "skip=7 delims=" %%a in ('dir /ad/b/o-d/tc') do >nul 2>&1 rd /s /q "%%a" popd и есть ли возможность из планировщика запускать его в фоне? (чтобы окно cmd не открывылось) |
Последний раз редактировалось zegordo, 17-02-2017 в 12:41. Отправлено: 12:28, 17-02-2017 | #9 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата zegordo:
но удобнее все целиком и компактнее, но это уже не по простому (если сразу вначале поставить @echo off, запись будет без команд как указано в коде ниже с этим примером, но при включенном при проверке можно растеряться и так есть кое-какие нюансы): @echo on set "f=log.txt" set "s1=Эта строка будет записана в файл "%f%" вместе с командой" set "s2=Эта строка будет записана в файл "%f%" без команды" set "s3=Эта строка не будет записана в файл "%f%" так как вывод занулен" >"%f%" ( for %%a in ("%s1%") do echo %%~a @echo. for %%a in ("%s2%") do @echo %%~a @echo. for %%a in ("%s3%") do @echo %%~a>nul& echo Занулена ^(пропущена^) @echo. @echo off for %%a in ("%s2%") do echo %%~a ) pause Цитата zegordo:
WScript.CreateObject("WScript.Shell").Run """%comspec%"" /c """ & WScript.Arguments.Item(0) & """", 0, False а в планировщике указать запуск файла "file.vbs" (путь к нему) и добавить запуск с параметром и указать путь к "name.bat" |
||
Отправлено: 15:43, 17-02-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Службы - [решено] Не запускается задание в планировщике задач при событии простой | Ferum01 | Microsoft Windows 7 | 1 | 15-04-2015 13:03 | |
Службы - [решено] Как создать задание в планировщике с помощью батника | Megatron13 | Microsoft Windows 7 | 17 | 15-02-2012 22:14 | |
CMD/BAT - создать задание в планировщике ХР по запуску батника | sov44 | Скриптовые языки администрирования Windows | 24 | 16-12-2011 09:05 | |
Не могу создать задание в планировщике задач | vlad_ok_777 | Microsoft Windows NT/2000/2003 | 0 | 18-05-2010 14:08 | |
Как программно добавить задание в планировщике задач | RVGroup | Программирование и базы данных | 5 | 24-10-2004 18:04 |
|