Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

bash doesn't load node on remote ssh command

Excuse me if the subject is vague, but I tried to describe my problem to the best of my possibilities. I have my raspberry pi which I want to deploy to using codeship. Rsyncing the files works perfectly, but when I am to restart my application using pm2 my problem occurs.

I have installed node and pm2 using the node version manager NVM.

ssh [email protected] 'source /home/pi/.bashrc; cd project; pm2 restart app.js -x -- --prod'0 min 3 sec
bash: pm2: command not found

I have even added:

shopt -s expand_aliases in the bottom of my bashrc but it doesn't help.

How can I make it restart my application after I have done a deploy? Thanks in advance for your sage advice and better wisdom!

EDIT 1: My .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

EDIT 2: I added /home/pi/.nvm/versions/node/v4.2.0/bin/pm2 which is the full path to pm2 and now I get the following error: /usr/bin/env: node: No such file or directory

It seems that even if I provide the full path, node isn't executed.

like image 656
Ms01 Avatar asked Oct 26 '15 23:10

Ms01


3 Answers

Like Sukima said, the likelihood is that this is due to an environment issue - SSH'ing into a server does not set up a full environment. You can, however, get around much of this by simply calling /etc/profile yourself at the start of your command using the . operator (which is the same as the "source" command):

ssh [email protected] '. /etc/profile ; cd project; pm2 restart app.js -x -- --prod'

/etc/profile should itself be set up to call the .bashrc of the relevant user, which is why I have removed that part. I used to have to do this quite a lot for quick proof-of-concept scripts at a previous workplace. I don't know if it would be considered a nasty hack for a more permanent script, but it certainly works, and would require minimal modification to your existing script should that be an issue.

like image 66
Ieuan Stanley Avatar answered Sep 21 '22 16:09

Ieuan Stanley


For me I have to load :nvm as I installed node and yarn using :nvm

To load :nvm when ssh remote execution, we call

ssh :user@:host 'source ~/.nvm/nvm.sh; :other_commands_here'
like image 36
Nam G VU Avatar answered Sep 18 '22 16:09

Nam G VU


You should enable some environment values by "source" or dot command ".". Here is an example.

ssh [email protected] '. /home/pi/.nvm/nvm.sh; cd project; pm2 restart app.js -x -- --prod'
like image 23
kevinYang Avatar answered Sep 17 '22 16:09

kevinYang