0

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

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

如果我start_server.sh通过 ssh 手动运行一切正常,但是当我在启动脚本中使用 ssh 尝试它时 - 现在已注释行 - 服务器无法运行。

我尝试将此脚本复制到/ect/rc.local,但结果相同。我也尝试过添加@reboot /home/vagrant/Code/start_server.shcrontab -e但没有成功。

谁能帮我?

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

4

1 回答 1

4

你应该把所有东西都放在你的Vagrantfile

#运行配置

您可以使用shell 配置程序从 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 触发器并执行类似的操作

Vagrant.configure(2) do |config|
  .....
  config.trigger.after :up do |trigger|
    trigger.run = {inline: 'system("open", "http://stackedit.app:5000"')
  end
end
于 2016-11-24T09:43:39.087 回答