启动Vagrant VM并按shell脚本启动Node.js脚本

时间:2016-11-23 18:59:33

标签: bash shell ssh vagrant stackedit

我在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。

1 个答案:

答案 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