Muszę uruchomić system oprogramowania, który ma zostać zainstalowany jako urządzenie na dedykowanej maszynie. W celu oszczędzania energii planuję uruchomić system na maszynie wirtualnej VirtualBox.
Host jest standardowym systemem Linux z systemem SysV-Init, gość jest silnie zmodyfikowanym Linuksem i wolałbym nie zmieniać go dalej. VirtualBox jest używany w wersji OSE.
Już wymyśliłem, jak uruchomić maszynę wirtualną podczas rozruchu hosta ( edycja: jest to zrobione, jak wspomniano poniżej przez Nikhil, za pomocą polecenia VBoxManager startvm
), ale jak mogę z wdziękiem zamknąć maszynę wirtualną? Każdy skrypt działający na hoście musiałby poczekać, aż gość całkowicie się zamknie.
Czy ktoś może zasugerować, jak na przykład musiałby wyglądać plik usługi, który to robi?
źródło
Odpowiedzi:
Czy próbowałeś
acpipowerbutton
z tego zestawu poleceń?Edytuj po przeczytaniu komentarzy:
Możesz użyć
acpid
lub innych narzędzi acpi, aby uczynić go wdzięcznym. Czy możesz również podać więcej informacji o tym, jak w tej chwili wyłączyć maszynę?Zwykły
shutdown
nie czekałby na niedokończone prace, opóźnienie może być zbyt długie.Zakładam, że nie używasz menedżera okien, więc wypróbuj to narzędzie.
Właśnie widziałem tego demona . Może ci się przydać.
źródło
vboxmanage list runningvms
aż do zniknięcia maszyny wirtualnej.Zamiast samemu to kodować, zastanów się nad użyciem Vagrant , który jest stworzony do tworzenia instancji i kontrolowania instancji virtualbox. Dokumentacja jest doskonała i sugeruję, abyś to sprawdził, zamiast próbować tworzyć własne.
Krótko mówiąc, należy utworzyć prosty plik kontrolny, a następnie uruchomić,
vagrant up
aby uruchomić tyle instancji VirtualBox, ile chcesz. Możesz użyćvagrant ssh
do zalogowania się na hostach ivagrant halt
zamknięcia hosta (bez zakończenia).vagrant destroy
pozbędę się instancji.Obsługuje aprowizację za pomocą lalek, Ansible lub Chef i pozwala kontrolować większość widocznych ustawień konfiguracji VBox.
źródło
Mam podobną aplikację jak ty, z jedną różnicą: muszę zrestartować system i odzyskać z migawki.
Interesuje Cię tryb bezgłowy .
Mam kilka takich usług, więc używam następującego skryptu:
VBox_StopRestoreStart.sh
JEŚLI chcesz z wdziękiem wyłączyć maszynę wirtualną, masz dwie opcje, w zależności od aplikacji:
VBoxManage controlvm <uuid>|<VMname> acpipowerbutton
VBoxManage controlvm <uuid>|<VMname> acpisleepbutton
VBoxManage controlvm <uuid>|<VMname> savestate
WSKAZÓWKI: Może się przydać:
VBoxManage list vms
- lista dostępnych vmsrdesktop IP-ADDR:3389
lubrdesktop-vrdp IP-ADDR:3389
- jeśli chcesz mieć GUI (nawet zdalnie ), gdy pracujesz w trybie bezgłowym:VBoxHeadless -s <uuid>|<VMname>
VBoxManage startvm
- zacznij od GUI do lokalnego debugowaniaPowiązany rozdział instrukcji VirtualBox: Rozdział 7. Zdalne maszyny wirtualne - Krok po kroku: tworzenie maszyny wirtualnej na serwerze bezgłowym
PS Jeśli jesteś zainteresowany w pełni funkcjonalnymi już zaimplementowanymi rozwiązaniami, OpenStack wydaje się interesującym wyborem.
źródło
Patrz dokumentacja zarządzania VM VirtualBox na http://www.virtualbox.org/manual/ch08.html
Aby wyświetlić listę maszyn wirtualnych, użyj polecenia
VBoxManage list vms
Aby uruchomić maszynę wirtualną, użyj polecenia
VBoxManage startvm
http://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm
Do kontrolowania maszyny wirtualnej użyj
VBoxManage controlvm
controlvm
Komenda pozwala na zmianę stanu maszyny wirtualnej, która jest aktualnie uruchomiony. Można określić następujące elementy:VBoxManage controlvm <vm> pause
tymczasowo wstrzymuje maszynę wirtualną, nie zmieniając jej stanu na dobre. Okno maszyny wirtualnej zostanie pomalowane na szaro, aby wskazać, że maszyna wirtualna jest obecnie wstrzymana. (Jest to równoważne wybraniu pozycji „Pauza” w menu „Maszyna” GUI.)Użyj,
VBoxManage controlvm <vm> resume
aby cofnąć poprzednie polecenie pauzy. (Jest to równoważne wybraniu pozycji „Wznów” w menu „Maszyna” interfejsu GUI.)VBoxManage controlvm <vm> reset
ma taki sam wpływ na maszynę wirtualną jak naciśnięcie przycisku „Reset” na prawdziwym komputerze: zimny restart maszyny wirtualnej, który uruchomi się ponownie i natychmiast uruchomi system operacyjny gościa. Stan maszyny wirtualnej nie jest wcześniej zapisywany i dane mogą zostać utracone. (Jest to równoważne wybraniu pozycji „Resetuj” w menu „Maszyna” interfejsu GUI.)VBoxManage controlvm <vm> poweroff
ma taki sam wpływ na maszynę wirtualną jak ciągnięcie kabla zasilającego na prawdziwym komputerze. Ponownie stan maszyny wirtualnej nie jest wcześniej zapisywany i dane mogą zostać utracone. (Jest to równoważne wybraniu pozycji „Zamknij” w menu „Maszyna” interfejsu GUI lub naciśnięciu przycisku zamknięcia okna, a następnie wybraniu opcji „Wyłącz maszynę” w oknie dialogowym.)Następnie stan maszyny Wirtualnej zostanie „Wyłączony”.
źródło
vboxmanage
(wszystkie małe litery).VBoxManage controlvm
komend tego nie robi./etc/init.d/vboxvms-service
skrypt na systemie hosta, który po uruchomieniu spowoduje włączenie wszystkich vms, a po zatrzymaniu spowoduje wyłączenie wszystkich vms.VBoxManage controlvm savestate
to kolejna możliwość (przynajmniej Google mówi), zapisuje status maszyn i wyłącza je czysto, ale wciąż nie ma sposobu, aby zmusić hosta do czekania.W przypadku systemu opartego na systemie można spróbować tego.
Krok # 1: Utwórz plik usługi
Krok # 2: Włącz plik usługi
Bibliografia
źródło
VBoxHeadless -s %i
do uruchamiania iVBoxManage controlvm %i savestate
zatrzymywania maszyny wirtualnej.Co powiesz na wysłanie polecenia przez ssh z hosta do gościa?
Nie jestem pewien, czy to działa i czy możesz później sprawdzić stan maszyny lub uzyskać status wyjścia, ale przynajmniej powinien zostać wyczyszczony.
źródło
Moje rozwiązanie: w tym skoroszycie „root” jest wywoływaczem, a „użytkownik” jest właścicielem „thevm”
Wiem, że vms zakończyło się, gdy wynik polecenia
VBoxManage list runningvms
zwraca pusty ciąg.źródło
Aby uruchomić vm:
Aby zatrzymać vm:
Wyświetl listę wszystkich uruchomionych maszyn wirtualnych:
źródło
Może to pomoże w ramach rozwiązania.
źródło
Dlaczego nie zalogujesz się do swojego gościa i nie zamkniesz go stamtąd?
Jeśli nie masz dobrego powodu, aby nie instalować sshd i uzyskiwać dostępu do maszyny wirtualnej za pośrednictwem VBox, wybrałbym skrypt, który po prostu wydaje polecenie
ssh shutdown -h now
. Szczerze mówiąc, stworzę skrypt dla każdej maszyny, która poprawnie go wyłączy i wykona kilka kontroli podczas pracy.Wystarczy spakować skrypt /etc/init.d/shutdown_vm, który wywołuje drugi z hosta, połączenie zostanie zablokowane, dopóki nie będzie gotowe. Ten proces (zgodnie z opisem) dodaje zależność linuksową u gościa, ale usuwa zależność VBox na hoście.
Przejdźmy do sedna: nie musisz uzyskiwać dostępu do VBox, aby zamknąć maszynę, jeśli masz jakieś środki dostępu do niej (tj. Ssh), wtedy system operacyjny zawsze będzie miał na to jakieś środki (włączenie, jest oczywiście inne)
źródło