【发布时间】:2016-01-26 05:31:06
【问题描述】:
如果主题含糊不清,请原谅,但我已尽我所能描述我的问题。我有我的树莓派,我想使用 codeship 部署它。 Rsyncing 文件完美运行,但是当我使用 pm2 重新启动我的应用程序时,我的问题出现了。
我已经使用节点版本管理器 NVM 安装了 node 和 pm2。
ssh pi@server.com 'source /home/pi/.bashrc; cd project; pm2 restart app.js -x -- --prod'0 min 3 sec
bash: pm2: command not found
我什至添加了:
shopt -s expand_aliases 在我的bashrc 的底部,但它没有帮助。
如何在我完成部署后让它重新启动我的应用程序?提前感谢您的明智建议和更好的智慧!
编辑 1:我的 .bashrc http://pastie.org/10529200
我的 $PATH:/home/pi/.nvm/versions/node/v4.2.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
编辑 2:我添加了 /home/pi/.nvm/versions/node/v4.2.0/bin/pm2,这是 pm2 的完整路径,现在我收到以下错误:/usr/bin/env: node: No such file or directory
似乎即使我提供了完整路径,节点也没有被执行。
【问题讨论】:
-
pm2是别名吗?如果是这样,它可能不会工作。你最好写一个脚本来处理这个并执行那个脚本。此外,您拥有的 ssh 命令假设您在 shell 中运行,但这不是一个好的假设。也许用"/bin/bash -c 'source ....'"开始你的ssh 命令,这会导致上面的写脚本注释。最后,pm2命令是否需要 tty?如果没有-t选项,则不会分配 tty。如果与您提供的示例不同,某些程序通常从交互式 shell 执行,则假定您有一个。 -
感谢您的建议,遗憾的是它不会有任何区别。尝试了您的建议,甚至添加了
/bin/bash -c "nvm use 4.2.0"以尝试启用节点。不幸的是,它不起作用。/bin/bash: nvm: command not found /bin/bash: pm2: command not found -
也许解决方案是简单地安装节点而不是使用像 nvm 这样的版本管理器?我更喜欢让 nvm 工作,因为它更容易切换版本。
-
请显示您的
/home/pi/.bashrc文件和echo $PATH输出。 -
Nvm 是一个函数,因此它必须在 shell 中获取。如果您使用
bash -c执行此操作,则它不起作用,因为一旦 -c 完成 bash shell 退出并且其中创建的任何环境都消失了。你有一个路径问题。/bin/bash -c ’echo $PATH’看看缺少什么。 (单引号不是双引号)。
标签: linux node.js bash ssh codeship