Ubuntu 15.10 vboxautostart-服務停止不起作用

Ubuntu 15.10 vboxautostart-服務停止不起作用

我已將 14.04 系統替換為全新安裝的 15.10。在 14.04 中,我使用 vboxautostart 初始化腳本在啟動時啟動 vbox guest 並在系統關閉時停止它。這曾經非常有效。

現在我正在嘗試使用 Ubuntu 15.10 實現類似的設定。主要區別是我必須使用我還不太熟悉的 systemd。我能夠進行 vbox 特定的設置,因此我可以 /usr/lib/virtualbox/vboxautostart-service.sh start/stop從 shell 進行調用,並且它運作得很好。我還可以用它systemctl start vboxautostart-service.service來啟動 vbox guest。在我啟用該服務後,它甚至會在系統啟動時自動啟動。但是,如果我嘗試停止服務

systemctl stop vboxautostart-service.service

它什麼也沒做,所以來賓之後仍在運行。
systemctl status 顯示以下內容:

root@linux:~# systemctl -l status vboxautostart-service.service
● vboxautostart-service.service
   Loaded: loaded (/usr/lib/virtualbox/vboxautostart-service.sh; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sa 2015-10-31 16:39:10 CET; 4min 57s ago
  Process: 5645 ExecStop=/usr/lib/virtualbox/vboxautostart-service.sh stop (code=exited, status=0/SUCCESS)
  Process: 5586 ExecStart=/usr/lib/virtualbox/vboxautostart-service.sh start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/vboxautostart-service.service
           ├─ 875 /usr/lib/virtualbox/VBoxXPCOMIPCD
           ├─ 880 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
           └─5602 /usr/lib/virtualbox/VBoxHeadless --comment server --startvm b3376916-8562-442e-a25e-cfe26fa800db --vrde config

Okt 31 16:37:52 linux systemd[1]: Starting vboxautostart-service.service...
Okt 31 16:37:52 linux vboxautostart-service.sh[5586]: Starting VirtualBox VMs configured for autostart
Okt 31 16:37:52 linux systemd[1]: Started vboxautostart-service.service.
Okt 31 16:39:10 linux systemd[1]: Stopping vboxautostart-service.service...
Okt 31 16:39:10 linux systemd[1]: Stopped vboxautostart-service.service.

服務中的 ExecStop 命令看起來很正確,但是,由於某種原因,當從 systemd 呼叫時它不起作用。知道我能在這裡做什麼嗎?

答案1

看起來我在使用 Oracle 打包的 systemd 和 virtualbox 5.0.10 的 debian jessie 上遇到了同樣的問題。

經過大量偵錯後,似乎與 /usr/lib/virtualbox/vboxautostart-service.sh 中的 stop() 函數(第 236 行左右)中呼叫 start-stop-daemon 的方式有關,該函數不會觸發start()函數以同樣的方式

我想出的是一個可怕的駭客,但真的希望有人對系統更友善來深入研究這個問題。

我在 /usr/lib/virtualbox/vboxautostart-service.sh 中替換:

for user in `ls $VBOXAUTOSTART_DB/*.stop` 
do
    start_daemon `basename $user | sed -ne "s/\(.*\).stop/\1/p"` $binary $PARAMS > /dev/null 2>&1
done

和 :

for user in `ls $VBOXAUTOSTART_DB/*.stop`
do
    su - `basename $user | sed -ne "s/\(.*\).stop/\1/p"` -c "$binary $PARAMS" > /dev/null 2>&1
done

答案2

看起來我在使用從 Oracle 打包的 systemd 和 VirtualBox 5.1.x 的 ubuntu 16.06 xenial 上遇到了同樣的問題。

我在這裡找到了解決方案: https://www.virtualbox.org/ticket/14955

在某一方面的變化/usr/lib/virtualbox/vboxautostart-service.sh

  1. start-stop-daemon --background --chuid $usr --start --exec $bin -- $@
  2. start-stop-daemon --chuid $usr --start --exec $bin -- $@

相關內容