Ms0*_*s01 8 linux ssh bash node.js 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
Run Code Online (Sandbox Code Playgroud)
我甚至添加了:
shopt -s expand_aliases
在我的底部,bashrc
但它没有帮助.
完成部署后,如何让它重新启动我的应用程序?在此先感谢您的圣人建议和更好的智慧!
编辑1:我的.bashrc http://pastie.org/10529200
My $ 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
看来即使我提供完整路径,也不会执行节点.
Suk*_*ima 16
我认为问题是shell执行节点具有像交互式ssh会话那样的完整环境的错误解释.最有可能的情况并非如此.
当SSH会话产生一个shell时,它经历了很多旋转,以构建一个适合交互式工作的环境.从登录过程继承,阅读/etc/profile
,阅读等事情~/.profile
.但是在你直接执行bash的情况下,这并不总能得到保证.实际上$PATH
可能完全是空的.
当/usr/bin/env node
执行它看起来节点在$PATH
以非交互的shell可以是任何东西或空.
大多数系统默认情况下PATH=/bin:/usr/bin
通常/usr/local/bin
不包含默认环境.
您可以尝试使用ssh强制登录ssh … '/bin/bash -l -c "…"'
.
您还可以在服务器上编写专用脚本,该脚本知道在交互式shell外部执行时环境应该如何:
#!/bin/bash
# Example shell script; filename: /usr/local/bin/my_script.sh
export PATH=$PATH:/usr/local/bin
export NODE_PATH=/usr/local/share/node
export USER=myuser
export HOME=/home/myuser
source $HOME/.nvm/nvm.sh
cd /usr/bin/share/my_script
nvm use 0.12
/usr/bin/env node ./script_name.js
Run Code Online (Sandbox Code Playgroud)
然后通过ssh调用它:ssh … '/usr/local/bin/my_script.sh'
.
除了这些想法,我不知道如何进一步提供帮助.
对我来说,我必须加载 :nvm,因为我使用 :nvm 安装了节点和纱线
要在 ssh 远程执行时加载 :nvm,我们调用
ssh :user@:host 'source ~/.nvm/nvm.sh; :other_commands_here'
Run Code Online (Sandbox Code Playgroud)
就像Sukima所说,可能是因为环境问题 - SSH进入服务器并没有建立一个完整的环境.但是,您可以通过简单地在命令开头使用自己调用/ etc/profile来解决大部分问题.operator(与"source"命令相同):
ssh pi@server.com '. /etc/profile ; cd project; pm2 restart app.js -x -- --prod'
Run Code Online (Sandbox Code Playgroud)
/ etc/profile本身应设置为调用相关用户的.bashrc,这就是我删除该部分的原因.在以前的工作场所,我曾经非常需要为快速概念验证脚本做很多事情.我不知道它是否会被认为是一个更加永久的脚本的讨厌的黑客,但它确实有效,并且如果这是一个问题,将需要对现有脚本进行最少的修改.
小智 6
您应该通过“source”或点命令“.”启用某些环境值。这是一个例子。
ssh pi@server.com '. /home/pi/.nvm/nvm.sh; cd project; pm2 restart app.js -x -- --prod'
Run Code Online (Sandbox Code Playgroud)
尝试:
ssh pi@server.com 'bash -l -c "source /home/pi/.bashrc; cd project; pm2 restart app.js -x -- --prod"'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4242 次 |
最近记录: |