我想为安装在我的 Ubuntu 机器中的虚拟机配置一个接口。当我手动创建它时,它可以工作:
vboxmanage hostonlyif create
vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1
通过检查 ifconfig,它在那里:
我想让这些更改在系统重启后继续存在并在系统启动时自动设置。为此我所做的是:
sudo mkdir /opt/systemd/
然后
sudo mkdir /opt/systemd/
将
sudo nano /opt/systemd/vboxhostonly
以下代码复制到文件中:
#!/bin/bash
vboxmanage hostonlyif create
vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1
然后按 Ctrl + X 退出,按 Y 保存并按 Enter 写入文件。
然后我让文件可执行
cd /opt/systemd/ then sudo chmod a+x vboxhostonly
我创建了一个服务
sudo touch /etc/systemd/system/vboxhostonlynic.service
sudo nano /etc/systemd/system/vboxhostonlynic.service
然后我通过输入以下内容来编辑文件:
Description=Setup VirtualBox Hostonly Adapter
After=vboxdrv.service
[Service]
Type=oneshot
ExecStart=/opt/systemd/vboxhostonly
[Install]
WantedBy=multi-user.target
然后按 Ctrl + X 退出,按 Y 保存并按 Enter 写入文件。
现在要安装服务并确保它在启动时加载,我输入:
systemctl daemon-reload
systemctl enable vboxhostonlynic.service
但是当我重新启动机器时界面不存在,有什么帮助吗?
答案1
您的bash
脚本找不到vboxmanage
,因为vboxmanage
不在脚本 的任何目录中。请尝试使用( )$PATH
的完整路径,但您可能需要将更多环境移动到脚本。vboxmanage
type -p vboxmanage
通过systemd
启动脚本运行的作业不会在桌面上的同一运行时环境中运行。systemd
启动脚本以 的形式运行root
。您的任何PATH
更改或其他环境变量设置都不会~/.bashrc
自动传播到您的systemd
作业。例如,没有$DISPLAY
,因此 GUI 程序需要特殊处理(阅读man xhost
)。其他所需的环境变量可能也需要帮助。
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每个环境中的结果 。