gpt4 book ai didi

linux - bash 不会在远程 ssh 命令上加载 Node

转载 作者:IT王子 更新时间:2023-10-29 00:16:02 24 4
gpt4 key购买 nike

如果主题含糊不清,请原谅,但我已尽力描述我的问题。我有我想使用 codeship 部署的树莓派。 Rsyncing 文件完美运行,但是当我使用 pm2 重新启动我的应用程序时,我的问题出现了。

我已经使用 Node 版本管理器 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

似乎即使我提供了完整路径, Node 也不会执行。

最佳答案

我认为问题在于对 shell 执行 Node 具有像交互式 ssh session 一样的完整环境的误解。很可能情况并非如此。

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

/usr/bin/env node 执行时,它会在您的 $PATH 中查找 Node ,在非交互式 shell 中它可以是任何东西或为空。

大多数系统都有默认的 PATH=/bin:/usr/bin,通常 /usr/local/bin 不包含在默认环境中。

您可以尝试使用 ssh … '/bin/bash -l -c "…"' 强制使用 ssh 登录。

您还可以在服务器上编写一个专门的脚本,它知道在交互式 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'

除了这些想法之外,我看不到如何进一步提供帮助。

关于linux - bash 不会在远程 ssh 命令上加载 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com