Для сервера Ubuntu 16.04.1 LTS я решил это, выполнив:
sudo systemctl enable rc-local.service
su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"
Обратите внимание, что virtual_box_user - это тот, который может видеть виртуальную машину (которую вы готовы запустить):
VBoxManage list vms
Пример:
$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28}
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}
Модифицированный /etc/rc.local должен выглядеть так
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
su bob -c "VBoxManage startvm 'virtualbox1' --type headless &"
su bob -c "VBoxManage startvm 'virtualbox2' --type headless &"
exit 0
Если вы не выбрали правильного владельца виртуального бокса, вы должны увидеть ошибку, набрав команду:
sudo systemctl status rc-local.service
Надеюсь, это поможет
Используйте \% вместо % - cron использует % в качестве новой строки.