Ubuntu20.04でVirtualBoxの仮想マシンをサービス化する

予め実行ユーザーをvboxusersグループに所属させておく。

# gpasswd -a username vboxusers

下記のファイルを作成する。パーミッションは644で良い。

[Unit]
Description=VirtualBox VM %I
After=network.target virtualbox.service
Before=runlevel2.target shutdown.target

[Service]
[Unit]
Description=VirtualBox VM %I
After=network.target virtualbox.service
Before=runlevel2.target shutdown.target

[Service]
User=username
Group=vboxusers
Type=forking
Restart=no
TimeoutSec=300
IgnoreSIGPIPE=no
KillMode=none
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/usr/bin/VBoxManage startvm %i --type headless
ExecStop=/bin/bash -c '/usr/bin/VBoxManage controlvm %i acpipowerbutton; while [ ! -z "`VBoxManage list runningvms | grep %i`" ]; do sleep 1; done'

[Install]
WantedBy=multi-user.target

win1とwin2という名前の仮想マシンをサービスとして有効にして起動する。

# systemctl enable vbox@win1
# systemctl start vbox@win1
# systemctl enable vbox@win2
# systemctl start vbox@win2