Stänga av Windows 7 VirtualBox rent med systemctl

Permalänk
Medlem

Stänga av Windows 7 VirtualBox rent med systemctl

Hej!

Jag har suttit i två dagar med att försöka få Windows 7 VM på VirtualBox att stängas av rent med systemctl när jag rebootar min Debian.

Jag har skapat en tjänst med följande innehåll:

[Unit] Description=Win7 VM Virtualbox After=network.target vboxdrv.service [Service] User=eazy ExecStart=/usr/bin/vboxheadless -s Win7 ExecStop=/usr/bin/vboxmanage controlvm Win7 acpipowerbutton [Install] WantedBy=multi-user.target

Den startas fint vid boot, men om jag rebootat min Debian host stängs inte Windows 7 av rent. Vid uppstart får jag upp Windows krashmeny där den väntar i 25 sekunder (eller hur länge det är) tills den startar upp.

Kör jag följande i konsol så stängs Windows av som det ska :

/usr/bin/vboxmanage controlvm Win7 acpipowerbutton

Jag har googlat och använt olika konfigurationer i min win7vm.service men ingen har funkat att stänga av Windows rent. Att använda VirtualBox egen service rekommenderas inte om man googlar. Jag har funderat på att göra ett eget script för reboot och poweroff men det känns inte rätt.

Någon som har en idé om hur min service ska se ut, eller om det är något annat som jag kan göra?

Permalänk
Medlem
Skrivet av Eazy:

Hej!

Jag har suttit i två dagar med att försöka få Windows 7 VM på VirtualBox att stängas av rent med systemctl när jag rebootar min Debian.

Jag har skapat en tjänst med följande innehåll:

[Unit] Description=Win7 VM Virtualbox After=network.target vboxdrv.service [Service] User=eazy ExecStart=/usr/bin/vboxheadless -s Win7 ExecStop=/usr/bin/vboxmanage controlvm Win7 acpipowerbutton [Install] WantedBy=multi-user.target

Den startas fint vid boot, men om jag rebootat min Debian host stängs inte Windows 7 av rent. Vid uppstart får jag upp Windows krashmeny där den väntar i 25 sekunder (eller hur länge det är) tills den startar upp.

Kör jag följande i konsol så stängs Windows av som det ska :

/usr/bin/vboxmanage controlvm Win7 acpipowerbutton

Jag har googlat och använt olika konfigurationer i min win7vm.service men ingen har funkat att stänga av Windows rent. Att använda VirtualBox egen service rekommenderas inte om man googlar. Jag har funderat på att göra ett eget script för reboot och poweroff men det känns inte rätt.

Någon som har en idé om hur min service ska se ut, eller om det är något annat som jag kan göra?

Har inte gjort exakt vad du pratar om, men har en misstanke:

Är det så att kommandot /usr/bin/vboxmanage controlvm Win7 acpipowerbutton returernerar direkt (skickar ACPI-knapptrycket och är sedan klart)?
I så fall tänker jag mig att du behöver något mer som ser till att systemd väntar på att nedstängningen blir klar också.

(Tänker mig att Windows visserligen börjar stänga ned men att ingenting väntar på att det blir klart och sedan stänger moderskeppet ned för tidigt?)

Permalänk
Medlem
Skrivet av evil penguin:

Har inte gjort exakt vad du pratar om, men har en misstanke:

Är det så att kommandot /usr/bin/vboxmanage controlvm Win7 acpipowerbutton returernerar direkt (skickar ACPI-knapptrycket och är sedan klart)?
I så fall tänker jag mig att du behöver något mer som ser till att systemd väntar på att nedstängningen blir klar också.

(Tänker mig att Windows visserligen börjar stänga ned men att ingenting väntar på att det blir klart och sedan stänger moderskeppet ned för tidigt?)

Kör jag i en consol:

/usr/bin/vboxmanage controlvm Win7 acpipowerbutton

Så stängs mitt Win7 VM av som det ska. Jag har prövat att lägga till:

TimeoutStopSec=300

för att det ska få tid på sig att stängas av, men det lyder inte det. Kör jag "sudo reboot" så säger det bara pang och systemet startas om. Skulle det hjälpa att göra ett script istället för reboot och poweroff? Vet inte hur det skulle se ut, men jag känner att mekar för mycket med systemet om jag försöker mig på det.

Kanske försöker jag automatisera för mycket, men jag är lite för glömsk för att komma ihåg att stänga ner mitt VM innan jag gör en reboot eller poweroff.

Permalänk
Medlem
Skrivet av Eazy:

Kör jag i en consol:

/usr/bin/vboxmanage controlvm Win7 acpipowerbutton

Så stängs mitt Win7 VM av som det ska. Jag har prövat att lägga till:

TimeoutStopSec=300

för att det ska få tid på sig att stängas av, men det lyder inte det. Kör jag "sudo reboot" så säger det bara pang och systemet startas om. Skulle det hjälpa att göra ett script istället för reboot och poweroff? Vet inte hur det skulle se ut, men jag känner att mekar för mycket med systemet om jag försöker mig på det.

Kanske försöker jag automatisera för mycket, men jag är lite för glömsk för att komma ihåg att stänga ner mitt VM innan jag gör en reboot eller poweroff.

TimeoutStopSec anger dock maximal tid att vänta på kommandot att bli klart... men om min gissning stämmer så är ju problemet istället att kommandot blir klart på nolltid, till skillnad från nedstängningen som tar jämförelsevis lång tid.

Mitt tips:
Testa om det fungerar om den bara får tid på sig (typ systemctl stop sdflkj och vänta själv på vad som händer)
Om det fungerar, och problemet verkar vara det jag föreslog, så fundera istället på hur man ser om vbox-maskinen stängts ned och nyttja detta för att lösa problemet

Permalänk
Medlem

En googling säger att

vboxmanage showvminfo VMNAME --machinereadable | egrep '^VMState="poweroff"$'

borde fungera för att se om maskinen är nedstängd... borde gå att göra en loop med detta som ett andra ExecStop-steg eller liknande

Permalänk
Medlem

Jag gav upp att försöka med en service. Istället använde jag ett script och la till det i init.d. Det var inte helt lätt det heller. Jag tog detta scriptet: https://superuser.com/questions/789653/init-d-control-script-...
Det som inte funkade var "sudo update-rc.d vbox defaults 99 01" Jag fick manuellt göra egna genvägar till rc2d och rc5d och lägga till S01 före länknamnet.

Jag har säkerligen inte gjort efter konstens regler och säkert något som jag gjort fel, men det funkar i alla fall. Scriptet sätter VM'et i "saved state" istället för power off. Vet inte vilket jag föredrar. Försökte editera scriptet att sätta det så att det stänger av istället för "saved state" men jag förstår mig inte på scriptet.

Jag tycker det är konstigt att jag inte hittar en guide som funkar för att göra det jag vill göra. Jag är ju inte direkt ensam med att köra ett VM och behovet att starta om nån gång ibland. Att köra en kill process på ett VM känns inte som det är något någon vill göra oavsett vilket OS man kör i VM's.