init.d Script wird nicht fertig ausgeführt(Shutdown/Reboot)

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
SchneeMann3000
Beiträge: 3
Registriert: 25.02.2012 23:06:50

init.d Script wird nicht fertig ausgeführt(Shutdown/Reboot)

Beitrag von SchneeMann3000 » 25.02.2012 23:30:25

Hallo Debianfreunde,

ich mache hier leider schon Stunden mit einem Problem rum, wofür ich auch nach stundenlanger suche in Google kein Erfolg hatte.
Ich nutze ein frisch aufgesetztes Debian 6.0.4 squeeze und wollte dort VirtualBox im headless-mode nutzen. Was eigentlich auch einwandfrei funktioniert.
Nur bei shutdown und reboot werden die VMs nicht heruntergefahren, da das init.d-Script einfach abgebrochen oder evtl. im Hindergrund ausgeführt wird, aber dann plötzlich der PC schon aus ist bzw. neu startet.

Hintergrundinfos:
Wenn man unter /etc/default/virtualbox

Code: Alles auswählen

    
SHUTDOWN_USERS="user1 user2" # space-delimited list of users who might have runnings vms
SHUTDOWN=savestate # if any are found, suspend them to disk
hinterlegt, dann wertet das /etc/init.d/vboxdrv Script diese Zeilen aus und beendet die VMs ordentlich. Dies funktioniert auch einwandfrei wenn ich manuell:

Code: Alles auswählen

/etc/init.d/vboxdrv stop
eingebe. Wird das Script hingegen beim Shutdown/Reboot aufgerufen, werden die VMs nicht beendet. Man sieht manchmal kurz die Prozentanzeige 10% 20%... die dann plötzlich weg ist und der PC bootet neu bzw. schaltet sich aus.

Habe es schon mit eigenen init.d-Scripts probiert... Wird nie vollständig ausgeführt... Habe den Eindruck, dass Debian nicht wartet, bis das Script durchlaufen ist sondern schon das nächste startet.(parallel ausgeführt werden) logischerweise ist dann nach dem letzten Script der PC aus/neu gestartet.

Vielen Dank für eure Hilfe
SchneeMann3000

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: init.d Script wird nicht fertig ausgeführt(Shutdown/Rebo

Beitrag von rendegast » 26.02.2012 09:12:16

Mal an die Version 4.0.10 aus den backports gedacht?
Eventuell auch mit dem backports-Kernel?

'wait=30' reicht nicht aus? Im Skript den Wert vergrößern?

Code: Alles auswählen

### BEGIN INIT INFO
# Provides:       vboxdrv virtualbox
# Required-Start: $remote_fs $network
# Required-Stop:  $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: VirtualBox Linux kernel module
### END INIT INFO
In /etc/insserv/overrides/virtualbox einen anderen Header angeben?
Durch den die Abarbeitung nicht parallel geschieht oder abbrechbar ist.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

SchneeMann3000
Beiträge: 3
Registriert: 25.02.2012 23:06:50

Re: init.d Script wird nicht fertig ausgeführt(Shutdown/Rebo

Beitrag von SchneeMann3000 » 28.02.2012 08:47:49

Hallo,

nein, an die Version 4.0.10 aus den backports habe ich noch nicht gedacht. Nutze 4.1.8 von "deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free".
Meine VMs sind nun auch alle unter der Version erstellt, weiß nicht wie das bei VirtualBox mit Abwärtkompatibilität ist.

Davon abgesehen müsste es ja auch irgendwie anders lösbar sein, da es meiner Meinung nach nur ein Abarbeitungsproblem im init.d Script ist.

'wait=30' würde vollkommen reichen, aber diese greifen bei "savestate" nicht, wenn ich das richtig aus dem Script deute.

Code: Alles auswählen

                elif [ "$SHUTDOWN" = "acpibutton" ]; then
                    begin_msg "Sending ACPI power button event to remaining VMs"
                    for v in $VMS; do
                        $VBOXMANAGE --nologo controlvm $v acpipowerbutton
                        wait=30
                    done
                    succ_msg
                elif [ "$SHUTDOWN" = "savestate" ]; then
                    begin_msg "Saving state of remaining VMs"
                    for v in $VMS; do
                        $VBOXMANAGE --nologo controlvm $v savestate
                    done
                    succ_msg
                fi
Was meiner Meinung nach eigentlich nicht nötig sei, weil der Befehl "$VBOXMANAGE --nologo controlvm $v savestate" normalerweise so lange offen bleibt bis er fertig ist.(wird nicht im Hintergrund ausgeführt) In einem eigenen Init.d-Script habe ich bereits mit z.B. "sleep 90" probiert. Wird aber einfach übersprungen bzw. im Hintergrund abgearbeitet und schwups nach ca. 5-10 Sekunden ist der PC aus.

"/etc/insserv/overrides/virtualbox" Diese Datei existiert bei mir nicht. Weiß leider auch nicht genau was ich da nun machen soll. Was muss ich denn in einem Header angeben, damit die Abarbeitung nicht parallel geschieht oder abbrechbar ist?

Vielen Dank für die Hilfe schon mal

Viele Grüße

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: init.d Script wird nicht fertig ausgeführt(Shutdown/Rebo

Beitrag von rendegast » 28.02.2012 09:10:52

SchneeMann3000 hat geschrieben: an die Version 4.0.10 aus den backports habe ich noch nicht gedacht. Nutze 4.1.8 von "deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free".
Ich hatte das erwogen, falls die Version 3.2.10 aus squeeze verwendet worden wäre.
Mein voreiliger Schluß kam aus
Ich nutze ein frisch aufgesetztes Debian 6.0.4 squeeze
'wait=30' würde vollkommen reichen, aber diese greifen bei "savestate" nicht, wenn ich das richtig aus dem Script deute.

Code: Alles auswählen

                    elif [ "$SHUTDOWN" = "savestate" ]; then
                        begin_msg "Saving state of remaining VMs"
                        for v in $VMS; do
                            $VBOXMANAGE --nologo controlvm $v savestate
                        done
                        succ_msg
                    fi
Bei mir (4.0.10-bpo) sieht der entsprechende Abschnitt so aus:

Code: Alles auswählen

				elif [ "$SHUTDOWN" = "savestate" ]; then
					log_action_msg "Saving state of remaining VMs from user $i"
					for v in $VMS; do
						VBoxManage --nologo controlvm $v savestate
						wait=30
					done





Nebenbei ist das Skript nicht debian-(squeeze?)-konform, weil die msg-Funktionen so nicht existieren?

Code: Alles auswählen

$ cat /lib/lsb/init-functions | grep succ_msg

$ cat /lib/lsb/init-functions | grep suc
        log_success_msg "$name is running"
log_success_msg () {

$ cat /lib/lsb/init-functions | grep begin_msg
        log_begin_msg $@
        log_begin_msg $@ "..."
        log_begin_msg $@ "..."
log_begin_msg () {
log_action_begin_msg () {
oder werden sie im Skript definiert?



---------------------------------------------------------
"/etc/insserv/overrides/virtualbox" Diese Datei existiert bei mir nicht. Weiß leider auch nicht genau was ich da nun machen soll.
Eine solche Datei wird einfach erstellt.
Sie muß denselben Namen wie das eigentliche Startskript besitzen.
Als Inhalt braucht es nur einen validen LSB-Header
### BEGIN INIT INFO
bis
### END INIT INFO
, sonstiges wird nicht beachtet (also viel Platz fuer Kommentare).
Was muss ich denn in einem Header angeben, damit die Abarbeitung nicht parallel geschieht oder abbrechbar ist?
Bsp., dieses Skript wird bei mir nach sendsigs und vor umountnfs.sh abgearbeitet,
zusammen mit rsyslog:

Code: Alles auswählen

# Required-Start:
# Required-Stop:     $network
# Should-Start:
# Should-Stop:       umountnfs
# X-Start-Before:
# X-Stop-After:      sendsigs
Sollte es alleine laufen, könnte
'# Should-Stop: umountnfs'
durch
'# Should-Stop: rsyslog'
ersetzt werden.

Eine wohl nicht gewünschte Möglichkeit wäre /etc/default/rcS: CONCURRENCY=none,
was die parallele Abarbeitung deaktiviert.

(Im Hinterkopf habe ich noch eine (automatisierte) Umsortierung der Start-/Stop-Links,
sodaß JEDER seinen eigenen Wert bekommt.
Das könnte aber auch eine mittlerweile obsolete Option von insserv sein (/etc/init.d/.legacy-bootordering ? ),
oder die Eigenart eines früheren yast.
Auf die Schnelle gelingt es mir jedenfalls nicht, das nachzustellen.)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

SchneeMann3000
Beiträge: 3
Registriert: 25.02.2012 23:06:50

Re: init.d Script wird nicht fertig ausgeführt(Shutdown/Rebo

Beitrag von SchneeMann3000 » 10.03.2012 15:42:18

Hallo,

so nun hab ich endlich die Zeit gefunden zum testen.
Nebenbei ist das Skript nicht debian-(squeeze?)-konform, weil die msg-Funktionen so nicht existieren?
Wenn ich es aus dem Script richtig deute, dann werden diese im Script definiert(umgesetzt auf debian msg-Funktionen)
Eine wohl nicht gewünschte Möglichkeit wäre /etc/default/rcS: CONCURRENCY=none,
was die parallele Abarbeitung deaktiviert.
Vielen Dank für die weiteren Tipps, aber ich habe mich dann doch für die "dirty" Lösung entschieden, nachdem einige Tests auch nicht funktionierten.

Mit CONCURRENCY=none funktioniert nun alles super, außer das der Systemstart und Shutdown ein wenig langsamer ist. Aber wie oft fährt man den Server schon hoch/runter...
Vielleicht wird der "Fehler" in den Scripten von kommenden VirtualBox-Versionen behoben.

Also Dank für deine Hilfe
Gruß

Antworten