Mam maszynę z kilkoma błędnymi maszynami wirtualnymi. Problemem jest to, że czasami zapominam zamknąć maszynę wirtualną przed zamknięciem lub ponownym uruchomieniem komputera. Z tego powodu moja maszyna utknęła z tym komunikatem:waiting for vboxnet0 to become free
Szukałem rozwiązań i znalazłem tę stronę:
http://en.kioskea.net/faq/3348-ubuntu-executing-a-script-at-startup-and-shutdown
Próbowałem tego, co zamknęły, ale to nie działa.
Napisałem plik sh dla tego polecenia:
#!/bin/bash
cd ~/workspace/git/mediaservice
vagrant halt
jakieś sugestie?
shutdown
reboot
execute-command
SERPRO
źródło
źródło
Odpowiedzi:
Jeśli twoje wirtualne maszyny wirtualne używają VirtualBox, możesz zmodyfikować / etc / default / virtualbox i zmienić wiersz o treści:
SHUTDOWN_USERS=""
do
SHUTDOWN_USERS="all"
Naprawiłem to na Ubuntu 14.04
źródło
SHUTDOWN_USERS=`cut -d: -f1 /etc/passwd`
zamiastSHUTDOWN_USERS="all"
/etc/default/virtualbox
pliku ...Aby wykonać skrypt podczas zamykania lub ponownego uruchamiania:
sudo chmod +x K99_script
Uwagi:
źródło
źródło
Jak to zrobić za pomocą Systemd (łatwiej)
Teraz, gdy warianty Ubuntu i Mint zostały przeniesione do systemd, moje stare rozwiązania oparte na powyższym są mniej satysfakcjonujące. Szukałem w Internecie, aby dowiedzieć się, jak to zrobić za pomocą systemd, i ostatecznie połączyłem mądrość innych i udokumentowałem to jako post na blogu na blogspot.com.au zawierający następujący samouczek.
Za pomocą systemd możesz utworzyć jeden lub dwa pliki do wywoływania skryptów za pomocą poniższych szablonów i wykonać kilka poleceń. Prosty.
Wersja GUI
Najpierw utwórz skrypty, które chcesz uruchomić podczas uruchamiania i / lub zamykania systemu. Zrób jedną, jeśli nie potrzebujesz obu. Utworzyłem .scopening_atstart i .scfullcopy_atend.
Następnie upewnij się, że oba są wykonywalne, klikając prawym przyciskiem myszy plik, wybierając właściwości i upewniając się, że w uprawnieniach zaznaczyłeś opcję Zezwalaj na uruchamianie pliku jako programu.
Dwa utworzone przeze mnie pliki zapełniają się i zapisują zawartość ramdysku. Tworzą również plik w moim katalogu domowym, aby udowodnić, że usługa działa. Były w formie:
Następnie otworzyłem menedżera plików jako root, otworzyłem
/etc/systemd/system
i utworzyłem plik startup.service i plik save-ramdisk.service. Oczywiście możesz wybrać własne nazwy, a nazwy ogólne mogą zawierać plik startowy o nazwie johns_start.service i plik zamykania o nazwie johns_shutdown.service. Po prostu nie wybieraj istniejących nazw usług.i
Możesz użyć tych samych plików usługi, zastępując pełną ścieżkę skryptu wykonywalnego moim.
Na koniec dla każdego z nich wykonaj polecenie systemctl włącz nazwę_plików (ale bez usługi sufiksu). Więc mój pierwszy był
systemctl enable startup
Uruchom ponownie komputer raz, aby uruchomić usługi. Usługa uruchamiania będzie wykonywana za każdym razem, gdy systemd wejdzie do celu dla wielu użytkowników, a usługa zatrzymania, gdy wyjdzie z celu dla wielu użytkowników. Alternatywne pliki usług z różnymi warunkami aktywacji zostaną opisane poniżej.
Dodatkowe przydatne polecenia obejmują:
Systemctl jest włączony.
Systemctl jest aktywny
systemctl uruchamia ponownie uruchamianie
Więcej można znaleźć w odnośniku powyżej.
Wersja CLI (wiersza poleceń)
W tym opisie założono, że działasz z katalogu domowego zamiast / home / john, w razie potrzeby korzystasz z sudo, a także z twojego edytora, w którym piszę vim lub svim.
Utwórz skrypty powłoki uruchamiania i zamykania w pierwszym wierszu
#!/bin/sh
i włącz ich uruchamianie za pomocąchmod +x my_new_filename
.Utwórz dwa pliki jak wyżej lub w tym przykładzie jeden plik do obsługi zadań uruchamiania i zamykania. Wykonam skrypty w moim katalogu domowym, ale @don_crissti pokazuje kilka alternatyw w Stack Exchange .
i skopiuj zawartość pliku:
Następnie włącz usługę za pomocą polecenia:
i uruchom ponownie system, po którym usługi będą aktywne. Polecenia
systemctl is-enabled start_and_stop
isystemctl is-active start_and_stop
mogą być używane do monitorowania nowych usług.Zmiana warunków wyzwalania dla zamknięcia
Przede wszystkim pliki używają otwartego lub zamkniętego środowiska wielu użytkowników, aby zainicjować uruchamianie skryptów. Poniższy plik wykorzystuje początek czterech potencjalnych procesów zamykania do inicjowania swoich skryptów. Dodanie lub usunięcie celów w linii Przed + linia WantedBy pozwoli ci na dokładniejsze rozróżnienie:
Ten plik został zaproponowany w drugiej odpowiedzi tego postu, ale nie mogłem go uruchomić, dopóki nie dodałem sekcji Instaluj.
Ponownie edytuj skrypt
/etc/systemd/service/
i włącz go, używającsystemctl enable your_file_name
. Kiedy zmieniłem cele, użyłemsystemclt disable file_name
polecenia, a następnie ponownie je włączyłem, co dowiązało go do katalogów docelowych. Uruchom ponownie, a usługa będzie działać.źródło
Utwórz plik wykonywalny powłoki za pomocą skryptu w katalogu /etc/init.d/.
Ponieważ należy to wykonać podczas zamykania lub ponownego uruchamiania, należy utworzyć linki miękkie w /etc/rc0.d/ i /etc/rc6.d
Przykład:
źródło
chmod
zmienia flagi uprawnień celu łącza, które są takie same dla obu argumentów. Określenie ich obu jest zbędne.Możesz znaleźć rozwiązanie tutaj: Zawieś / wznów wszystkie skrzynki Vagrant przy zamykaniu / uruchamianiu systemu .
Istnieje prosty skrypt inicjujący, który zawiesza wszystkie działające pola przed zamknięciem.
Instalacja
Edytuj
/etc/init.d/vagrant-boxes
i wklej skrypt z powyższego artykułu i zapisz. Lub pobierz go stąd i zapisz w/etc/init.d/vagrant-boxes
. Na debian / ubuntu itp. Uruchomźródło
Dla Ubuntu 14.10 Ci coś
RC04
nieRC99
Co robić od zera
/etc/init.d/scriptName
ln -s /etc/rc6.d/K04scriptName /etc/init.d/scriptName
Kroki, przez które przeszedłem
źródło