2016-11-23 197 views
-1

我在Vagrant上安装了StackEdit。我想通过一次点击启动Vagrant和StackEdit。 我创建的bash脚本:启动Vagrant VM并通过shell脚本启动Node.js脚本

#!/bin/bash 

vagrant up 

#ssh -p 2222 -i /d/stackedit/.vagrant/machines/default/virtualbox/private_key [email protected] -t '/home/vagrant/Code/start_server.sh' 

start "C:\Program Files\Mozilla Firefox\firefox.exe" http://stackedit.app:5000 

start_server.sh在VM

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.shcrontab -e,但没有成功。

任何人都可以帮助我吗?

我的系统是Windows 10.我使用Git Bash。

回答

2

你应该把一切都在你的Vagrantfile

运行配置

您可以从Vagrantfile使用shell provisioner

Vagrant.configure("2") do |config| 
    config.vm.provision "shell", path: "Code/start_server.sh" 
end 

检查运行脚本,你必须在默认情况下一些选项它会运行根,所以你可以改变,如果你想运行你的脚本作为流浪的用户

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 
+0

谢谢您的回答。一切都很好! –