加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – bash不会在远程ssh命令上加载节点

发布时间:2020-12-13 16:58:56 所属栏目:Linux 来源:网络整理
导读:如果主题含糊不清,请原谅我,但我试图尽可能地描述我的问题.我有我的树莓派,我想部署使用代码. Rsyncing文件工作正常,但当我使用pm2重新启动我的应用程序时,我的问题出现了. 我已经使用节点版本管理器NVM安装了node和pm2. ssh pi@server.com 'source /home/pi
如果主题含糊不清,请原谅我,但我试图尽可能地描述我的问题.我有我的树莓派,我想部署使用代码. 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:/斌:在/ usr /本地/游戏:在/ usr /游戏

编辑2:我添加了/home/pi/.nvm/versions/node/v4.2.0/bin/pm2这是pm2的完整路径,现在我收到以下错误:/usr/bin/env:node:没有这样的文件或目录

看来即使我提供完整路径,也不会执行节点.

解决方法

我认为问题是shell执行节点具有像交互式ssh会话那样的完整环境的错误解释.最有可能的情况并非如此.

当SSH会话产生一个shell时,它经历了很多旋转,以构建一个适合交互式工作的环境.比如继承登录过程,读取/ etc / profile,读取?/ .profile.但是在直接执行bash的情况下,这并不总能得到保证.事实上,$PATH可能完全是空的.

当/usr/bin/env节点执行时,它会查找$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

然后通过ssh:ssh …’/usr/local/bin/my_script.sh’调用它.

除了这些想法,我不知道如何进一步提供帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读