Puncte:0

`nohup: nu a reușit să ruleze comanda 'node': nu există un astfel de fișier sau director` când rulați scriptul prin ssh

drapel fr

Am un server la distanță în care servesc un server web folosind node (express) și nginx. Am un ./devops/deploy.sh script care pornește serverul web și repornește nginx. Scriptul respectiv funcționează corect dacă mă conectez manual la instanță (ssh <utilizator>@<ip>) și apoi alergați

cd my-repo
git pull
./devops/deploy.sh

Totuși, nu pot configura un script care automatizează acest lucru. Am incercat cu acest script

#!/bin/bash
set -euo pipefail

utilizare() {
  pisica << EOF
Utilizare: ./devops/update-instance.sh <user@ip>
EOF
  ieșire -1
}

CONNECTION_STRING=${1:-""}

dacă [ -z $CONNECTION_STRING ]; atunci
  utilizare
fi

ssh -t $CONNECTION_STRING << EOF
cd my-repo
git pull
./devops/deploy.sh
EOF

dar îmi dă nohup: nu a reușit să ruleze comanda „node”: nu există un astfel de fișier sau director. Acesta este scriptul de implementare pe care îl rulez local de pe mașina mea

#!/bin/bash
set -euo pipefail

lsof -ti:3000 && ucide $(lsof -ti:3000)
bara de ecou
echo $(nodul -v)
nohup node runner.js &

NGINX_CONFIG_PATH=/etc/nginx/sites-enabled/my-repo
rm -rf $NGINX_CONFIG_PATH
cp devops/nginx-config $NGINX_CONFIG_PATH
nginx -t
nginx -s reîncărcare

node runner.js pur și simplu pornește o aplicație expres, așa că nimic ciudat acolo.

Ceea ce vreau să obțin este foarte asemănător cu această altă postare https://askubuntu.com/questions/349262/run-a-nohup-command-over-ssh-then-disconnect dar nu se menționează această eroare nohup + nod.
După ce l-am privit, mi-am dat seama că, cel mai probabil, fac ceva greșit în modul în care îmi numesc scriptul de implementare, dar nu înțeleg cu adevărat ce ar putea fi. În scriptul de actualizare am încercat să fac nohup ./devops/deploy.sh & în loc de simplu ./devops/deploy.sh dar a primit la fel nohup: nu a reușit să ruleze comanda „node”: nu există un astfel de fișier sau director eroare.
Dacă pun conținutul ./devops/deploy.sh script în interiorul ssh ... << EOF <conținut aici> EOF Si eu primesc la fel nohup: nu a reușit să ruleze comanda „node”: nu există un astfel de fișier sau director eroare


S-a comutat comanda ssh la

export NVM_DIR="\$HOME/.nvm"
\. „\$NVM_DIR/nvm.sh”
\. „\$NVM_DIR/bash_completion”
cd my-repo
git pull
nohup ./devops/deploy.sh 1>api.stdout 2>api.stderr &
Puncte:1
drapel bd

Rularea unui fișier executabil (în acest caz, nodul) prin simpla atribuire a numelui fără o cale necesită ca fișierul să se afle într-unul dintre directoarele specificate în variabila de mediu CALE. Conținutul exact al acelei variabile tinde să varieze între diferitele moduri de a rula un shell, cum ar fi conectarea interactivă sau pornirea unui script. Ta nodul executabilul se află probabil într-un director care este listat în CALE când vă conectați interactiv, dar nu și dacă rulați scriptul.

Practic, există două moduri de a rezolva acest lucru:

  1. Seteaza CALE variabilă explicit la începutul scriptului pentru a include toate directoarele din care scriptul intenționează să ruleze fișiere executabile. Nu uitați să includeți /cos și /usr/bin pentru că acolo se află comenzile standard. Deci, de exemplu, dacă dvs nodul executabil se află în /opt/MyPrettyDevops/bin, ai adăuga linia

    export PATH=/bin:/usr/bin:/opt/MyPrettyDevops/bin
    
  2. Specificați calea către nodul executabil în mod explicit, prin modificarea nohup linie către

    nohup /opt/MyPrettyDevops/bin/node runner.js &
    
ffigari avatar
drapel fr
Asta a fost, gestionez nodul prin nvm și se pare că autentificarea prin ssh ar încărca profilul bash, care ar încărca apoi nvm și nodul. A trebuit să încarce manual nvm și node în script. Apoi a trebuit să urmez sugestiile stdout / stdin pentru ca apelul ssh să se termine.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.