Ich habe eine Maschine, auf der ein paar vagabundierende VMs laufen. Das Problem, das ich habe, ist, dass ich manchmal vergesse, diese VM herunterzufahren, bevor ich meinen Computer herunterfahre oder neu starte. Aus diesem Grund bleibt meine Maschine mit der folgenden Meldung hängen:waiting for vboxnet0 to become free
Ich habe nach Lösungen gesucht und diese Seite gefunden:
http://de.kioskea.net/faq/3348-ubuntu-executing-a-script-at-startup-and-shutdown
Ich habe versucht, was sie zum Herunterfahren, aber es funktioniert nicht.
Ich habe eine sh-Datei für diesen Befehl geschrieben:
#!/bin/bash
cd ~/workspace/git/mediaservice
vagrant halt
irgendwelche Vorschläge?
shutdown
reboot
execute-command
SERPRO
quelle
quelle
Antworten:
Wenn Ihre vagabundierenden VMs VirtualBox verwenden, können Sie / etc / default / virtualbox ändern und die folgende Zeile ändern:
SHUTDOWN_USERS=""
zu
SHUTDOWN_USERS="all"
Das hat es für mich auf Ubuntu 14.04 behoben
quelle
SHUTDOWN_USERS=`cut -d: -f1 /etc/passwd`
anstelle vonSHUTDOWN_USERS="all"
/etc/default/virtualbox
Datei ...So führen Sie ein Skript beim Herunterfahren oder Neustarten aus:
sudo chmod +x K99_script
Anmerkungen:
Quelle
quelle
So geht's mit Systemd (einfacher)
Nachdem die Ubuntu-Varianten und Mint zu systemd gewechselt sind, stellte ich fest, dass meine alten Lösungen, die auf den oben genannten basieren, weniger zufriedenstellend sind. Ich suchte im Internet, um herauszufinden, wie man es mit systemd macht, und kombinierte schließlich die Weisheit anderer und dokumentierte es als Blog-Post auf blogspot.com.au mit dem folgenden Tutorial.
Mit systemd erstellen Sie eine oder zwei Dateien, um Ihre Skripte mithilfe der folgenden Vorlagen aufzurufen, und führen einige Befehle aus. Einfach.
GUI-Version
Erstellen Sie zuerst die Skripte, die Sie beim Starten und / oder Herunterfahren ausführen möchten. Machen Sie einfach einen, wenn Sie nicht beide benötigen. Ich habe .scopening_atstart und .scfullcopy_atend erstellt.
Stellen Sie dann sicher, dass beide Programme ausführbar sind, indem Sie mit der rechten Maustaste auf die Datei klicken, Eigenschaften auswählen und sicherstellen, dass Sie unter Berechtigungen die Option Datei als Programm ausführen lassen ausgewählt haben.
Die beiden von mir erstellten Dateien füllen und speichern den Inhalt einer Ramdisk. Sie erstellen auch eine Datei in meinem Home-Verzeichnis, um zu beweisen, dass der Dienst funktioniert. Sie waren von der Form:
Dann öffnete ich meinen Dateimanager als root, öffnete
/etc/systemd/system
und erstellte eine Datei startup.service und eine Datei save-ramdisk.service. Natürlich können Sie Ihre eigenen Namen auswählen, und generische Namen können eine Startdatei mit dem Namen johns_start.service und eine Datei zum Herunterfahren mit dem Namen johns_shutdown.service enthalten. Wählen Sie einfach keine vorhandenen Dienstnamen aus.und
Sie können dieselben Dienstdateien verwenden und meinen durch den vollständigen Pfad Ihres ausführbaren Skripts ersetzen.
Führen Sie zum Schluss für jeden Befehl den Befehl systemctl enable your_files_name aus (jedoch ohne den Suffix-Dienst). Also war mein erster
systemctl enable startup
Starten Sie den Computer einmal neu, um die Dienste zu starten. Der Startdienst wird immer dann ausgeführt, wenn systemd in das Mehrbenutzerziel eintritt, und der Stoppdienst, wenn es das Mehrbenutzerziel verlässt. Alternative Servicedateien mit unterschiedlichen Aktivierungsbedingungen werden unten beschrieben.
Zusätzliche nützliche Befehle umfassen:
Systemctl ist für den Start aktiviert.
Systemctl ist für den Start aktiv.
Systemctl startet den Start neu
Weitere Informationen finden Sie unter der obigen Referenz.
CLI (Command Line) Version
In dieser Beschreibung wird davon ausgegangen, dass Sie von Ihrem Home-Verzeichnis aus und nicht von / home / john aus arbeiten, sudo nach Bedarf verwenden und den Editor auswählen, in dem ich vim oder svim schreibe.
Erstellen Sie in der ersten Zeile Shell-Skripte zum Starten und Herunterfahren
#!/bin/sh
und machen Sie sie mit ausführbarchmod +x my_new_filename
.Erstellen Sie zwei Dateien wie oben oder in diesem Beispiel eine Datei, um Start- und Herunterfahraufgaben zu erledigen. Ich werde Skripte in meinem Home-Verzeichnis ausführen, aber @don_crissti zeigt einige Alternativen bei Stack Exchange .
und in den Dateiinhalt kopieren:
Dann Aktivieren Sie den Dienst mit dem Befehl:
und starten Sie Ihr System neu, wonach die Dienste aktiv sind. Die Befehle
systemctl is-enabled start_and_stop
undsystemctl is-active start_and_stop
können zur Überwachung Ihrer neuen Dienste verwendet werden.Ändern der Auslösebedingungen für das Herunterfahren
Die Dateien verwenden vor allem das Öffnen oder Schließen der Mehrbenutzerumgebung, um die Ausführung der Skripte einzuleiten. Die folgende Datei verwendet den Anfang von vier möglichen Herunterfahrprozessen, um die Skripte zu starten. Durch Hinzufügen oder Entfernen der Ziele in der Vorher-Zeile + der WantedBy-Zeile können Sie feinere Unterscheidungen treffen:
Diese Datei wurde in der zweiten Antwort dieses Beitrags vorgeschlagen , konnte jedoch erst ausgeführt werden, nachdem ich einen Installationsabschnitt hinzugefügt hatte.
Bearbeiten Sie das Skript erneut in
/etc/systemd/service/
und aktivieren Sie es mitsystemctl enable your_file_name
. Als ich die Ziele geändert habe, habe ich densystemclt disable file_name
Befehl verwendet und wieder aktiviert, wodurch er mit den Zielverzeichnissen verknüpft wurde. Starten Sie neu und der Dienst wird ausgeführt.quelle
Erstellen Sie eine ausführbare Shell-Datei mit Ihrem Skript im Verzeichnis /etc/init.d/.
Da dies während des Herunterfahrens oder Neustarts ausgeführt werden muss, müssen Softlinks in /etc/rc0.d/ und /etc/rc6.d erstellt werden
Beispiel:
quelle
chmod
ändert die Berechtigungsflags des Link-Ziels, was für beide Argumente gleich ist. Die Angabe beider ist überflüssig.Hier finden Sie eine Lösung: Unterbrechen / Fortsetzen aller Vagrant-Boxen beim Herunterfahren / Starten des Systems .
Es gibt ein einfaches Init-Skript, das alle laufenden Boxen vor dem Herunterfahren anhält.
Installation
Bearbeiten Sie
/etc/init.d/vagrant-boxes
das Skript aus dem obigen Artikel, fügen Sie es ein und speichern Sie es. Oder laden Sie es von hier herunter und speichern Sie es in/etc/init.d/vagrant-boxes
. Führen Sie unter Debian / Ubuntu usw. Folgendes ausquelle
Für Ubuntu 14.10 geht dir sowas
RC04
nichtRC99
Was ist von Grund auf zu tun?
/etc/init.d/scriptName
ln -s /etc/rc6.d/K04scriptName /etc/init.d/scriptName
Schritte, die ich durchgemacht habe
quelle