Я использую бродягу для разработки. Я забыл закрыть несколько виртуальных машин. Когда я выхожу из системы на своем хост-компьютере, процесс завершения работы Ubuntu зависает.
Может ли быть способ написать сценарий закрытия всех бродячих коробок с небольшим количеством командной строки-фу? Что-то вроде следующего, но то, что, ну, работает.
for f in $HOME/vagrant;
do;
cd $f
vagrant halt
done;
Ответы:
Для управления сценариями машин Virtual Box мы можем использовать команды VBoxManage :
Список запущенных машин (возвращает имя и UUID):
Прекратите работу виртуальных машин, «спячки» их (рекомендуется, чтобы избежать потери данных)
Poweroff работает виртуальные машины (не рекомендуется, потому что мы можем потерять данные в гостевой)
Использовать ACPI в гостевой ОС с поддержкой ACPI (предпочтительно
poweroff
для корректного отключения гостей)Также смотрите: Как безопасно завершить работу гостевой ОС в VirtualBox с помощью командной строки
Обновление от ОП
Основываясь на этом правильном ответе ниже, я добавил этот скрипт bash "
$HOME/bin/stop-vagrant.sh
". Так что теперь у меня есть кое-что, что может безопасно начать остановку всех бродячих виртуальных машин, о которых я, возможно, уже говорил, но которые забыли в сеансе.Команда объяснила:
vboxmanage list runningvms |
- получает список всех запущенных vms под VirtualBoxsed -r 's/.*\{(.*)\}/\1/' |
- обрезает строку до идентификатораxargs -L1 -I {} VBoxManage controlvm {} savestate
- запускает команду сохранения состояния в каждом открытом окне.На
xargs
-L1
- взять по одной строке за раз-I {}
- использует {} в качестве заполнителя для следующей командыисточник
-r
опция уникальна для GNU Sed.-E
вместо-r
. Это флаг использования расширенных регулярных выражений.Другой ответ хорош для работы с Virtualbox, но Vagrant имеет свои собственные механизмы для работы с виртуальными машинами, и, как было упомянуто в одном из комментариев, он поддерживает не только VirtualBox, только VMWare на данный момент, но кто знает позже!
Кажется, это работает для меня:
Примечание:
Это работает с версиями Vagrant после 1.6, для более старых версий вам, вероятно, следует обновить, но если вы не можете, один из других вариантов, который фокусируется на Virtualbox, может быть лучше.
источник
global-status
была введена в Vagrant 1.6 . Пользователи более старых версий Vagrant, особенно те, которые установили его черезapt-get
и, возможно, все еще используют 1.4.3, должны будут обновить свою установку Vagrant, прежде чем они смогут использовать эту команду.xargs
не поддерживает-r
, поэтому вы можете установитьgxargs
черезbrew
и использовать его вместо.Мой механизм для этого:
vagrant global-status | grep virtualbox | cut -c 1-9 | while read line; do echo $line; vagrant halt $line; done;
virtualbox
(Отфильтровывает текст справки, сломается, если вы используете какой-либо другой поставщик)vagrant halt $line
остановить бродяги для этого глобального уникального идентификатораЭто лучше, чем метод Virtualbox, описанный выше, потому что он также будет запускать любые механизмы выключения, настроенные с помощью vagrant.
источник
sed
иawk
. Спасибо!vagrant suspend
вместо того,vagrant halt
чтобы сохранять состояние и приостанавливать работу для ускорения спада и повышения.В случае, если другие люди дойдут до этого вопроса: для тех, кто использует VirtualBox, он уже может позаботиться об этом, только включает в себя редактирование файла:
init.d
Положительным моментом является то, что нет необходимости редактировать / создавать любой выход из системы или выполнять команды, опубликованные в других ответах. Недостатком является то, что это решение относится к VirtualBox.Протестировано на Ubuntu 14.10 с VirtualBox 4.3.18.
Весь кредит идет на этот пост .
источник
Комбинируя некоторые другие ответы, это закроет все запущенные виртуальные ящики бродяги:
источник
Я просто использую
vagrant halt
. Если вы запустите его без дополнительных аргументов, он остановит все машины, определенные вVagrantfile
.источник
Если вы пишете сценарии для анализа команд Vagrant, рекомендуется проанализировать машинно-ориентированный вывод (
--machine-readable
), который является более последовательным.Формат такой:
так что вы можете импортировать его как файл CSV, так как он разделен запятыми.
С shell, возможно, труднее разобрать, например:
См .: Vagrant - Машиносчитываемый вывод
Однако мне легче разобрать стандартный вывод, например
Btw. Теоретически
vagrant
команда должна принимать регулярное выражение для списка виртуальных машин , чтобы приостановить в соответствии с настоящим GH пост , например:но это не работает, и есть ошибка # 7221, которая находится на рассмотрении, чтобы исправить это.
Связанные билеты GitHub:
источник
Это может или не может работать для вас ;-) Работает для меня
vagrant_halt_all.sh
источник