如何在vagrant provision shell中永远运行节点工具

时间:2014-01-26 10:39:22

标签: node.js shell vagrant forever

我是流浪汉的新手,我正在VirtualBox 4.3.6中设置一个Node.js CentOs 6.5 x86_64开发机器并将其打包到一个流浪盒中。我的主机操作系统是Windows 8.1 Pro。

我要做的是在shell中创建一个配置,在运行vagrant up时,bootstrap.sh将检查项目目录中是否存在app.js(如果它不存在)将创建一个临时app.js并运行forever start -w app.js

所有内容都在bash脚本中运行,但当它到达forever start -w app.js行时,我收到此错误。

/tmp/vagrant-shell: line 14: forever: command not found
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

chmod +x /tmp/vagrant-shell && /tmp/vagrant-shell

Stdout from the command:



Stderr from the command:

/tmp/vagrant-shell: line 14: forever: command not found

在vagrant ssh中运行forever start -w app.js工作正常没有问题。在谷歌搜索时,有人说这是一个权限设置问题。我尝试将vagrant用户添加到admin组并运行以下命令:

$ sudo groupadd admin
$ usermod -G admin vagrant

我还修改了/etc/sudoers文件,并将SSH_AUTH_SOCK添加到了env_keep选项中,注释了Defaults requiretty行并添加了行%admin ALL=NOPASSWD: ALL。 我得到了同样的错误。

这是我的bootstrap.sh

#!/usr/bin/env bash
IFS='' read -r -d '' NODEAPP <<'EOF'
var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello Universe.\n');}).listen(3000, '127.0.0.1');
console.log('Listening at http://127.0.0.1:3000/');
EOF

cd /usr/share/nginx/html
if [ ! -f app.js ]; then
    echo "$NODEAPP" >> app.js
fi
forever start -w app.js

这是我的Vagrantfile:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos65NODE"
  config.vm.box_url = "centos65NODE.box"
  config.vm.network :private_network, ip: "192.168.50.10"
  config.vm.provision :shell, :path => "bootstrap.sh"
end

2 个答案:

答案 0 :(得分:0)

在黑暗中这是一个镜头,但它可能是一个路径问题。我的设置不同(Ubuntu,Puppet),但是能够从命令行执行Forever而不是通过配置执行Forever的症状是相似的。我必须提供Forever可执行文件的完整路径,以便通过提供运行。例如 - “/ usr / local / node / node-default / bin / forever start app.js”

答案 1 :(得分:0)

请记住,配置脚本以root身份运行