我已将 14.04 系统替换为全新安装的 15.10。在 14.04 中,我使用 vboxautostart init 脚本在启动时启动 vbox 客户机并在系统关闭时停止它。这曾经非常有效。
现在我尝试使用 Ubuntu 15.10 实现类似的设置。主要区别在于我必须使用我还不太熟悉的 systemd。我能够进行 vbox 特定的设置,因此我可以
/usr/lib/virtualbox/vboxautostart-service.sh start/stop
从 shell 调用,并且它运行完美。我还可以用来systemctl start vboxautostart-service.service
启动 vbox 客户端。在我启用服务后,它甚至会在系统启动时自动启动。但是,如果我尝试使用以下命令停止服务
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() 函数中调用 start-stop-daemon 的方式有关(大约第 236 行),它不会以相同的方式触发 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
:
start-stop-daemon --background --chuid $usr --start --exec $bin -- $@
start-stop-daemon --chuid $usr --start --exec $bin -- $@