我在Vagrant上安装了StackEdit。我想一键启动Vagrant和StackEdit。 我创建了bash脚本:
#!/bin/bash
vagrant up
#ssh -p 2222 -i /d/stackedit/.vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1 -t '/home/vagrant/Code/start_server.sh'
start "C:\Program Files\Mozilla Firefox\firefox.exe" http://stackedit.app:5000
VM中的和start_server.sh
if [ $(ps -e|grep node|wc -l) = "0" ] ; then
(export PORT=5000 && node Code/Project/public/stackedit/server.js) &
fi
sleep 5
exit 0
如果我通过ssh manualy运行start_server.sh
一切正常,但是当我在启动脚本中使用ssh尝试它时 - 现在注释行 - 服务器不会运行。
我尝试将此脚本复制到/ect/rc.local
,但结果是一样的。
我尝试将@reboot /home/vagrant/Code/start_server.sh
添加到crontab -e
,但没有成功。
任何人都可以帮助我吗?
我的系统是Windows 10.我使用Git Bash。
答案 0 :(得分:3)
你应该把所有内容都放在Vagrantfile
您可以使用shell provisioner
从Vagrantfile运行脚本Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "Code/start_server.sh"
end
检查,默认情况下你有一些选项,它将以root身份运行,因此你可以改变,如果你想以臭名昭着的用户身份运行你的脚本
Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "Code/start_server.sh", privileged: false
end
并且您还可以确保每次启动VM时都运行脚本(默认情况下,它只运行一次或专门调用provision
参数)
Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "Code/start_server.sh", run: "always"
end
Vagrantfile是一个ruby脚本,因此您可以从文件中调用任何命令,但它会立即在任何场合运行命令。
然后,如果您想在框启动后运行,可以使用vagrant trigger plugin并执行类似
的操作Vagrant.configure(2) do |config|
.....
config.trigger.after :up do
system("open", "http://stackedit.app:5000")
end
end