Рейтинг:0

`nohup: не удалось запустить команду 'узел': нет такого файла или каталога` при запуске скрипта через ssh

флаг fr

У меня есть удаленный сервер, на котором я обслуживаю веб-сервер, используя node (express) и nginx. у меня есть ./devops/deploy.sh скрипт, который запускает веб-сервер и перезапускает nginx. Указанный скрипт работает правильно, если я вручную подключаюсь к экземпляру (ssh <пользователь>@<ip>), а затем запустить

компакт-диск с моим репозиторием
git тянуть
./devops/deploy.sh

Однако я не могу настроить скрипт, который автоматизирует это. Я пробовал с этим скриптом

#!/бин/баш
установить -euo pipefail

Применение() {
  кошка << EOF
Использование: ./devops/update-instance.sh <user@ip>
EOF
  выход -1
}

CONNECTION_STRING=${1:-""}

если [-z $CONNECTION_STRING]; тогда
  Применение
фи

ssh -t $CONNECTION_STRING << EOF
компакт-диск с моим репозиторием
git тянуть
./devops/deploy.sh
EOF

но это дает мне nohup: не удалось запустить команду «узел»: нет такого файла или каталога. Это сценарий развертывания, который я запускаю локально со своей машины.

#!/бин/баш
установить -euo pipefail

lsof -ti:3000 && убить $(lsof -ti:3000)
эхо бар
эхо $(узел -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 -s перезагрузить

узел runner.js просто запускает экспресс-приложение, так что ничего странного.

То, чего я хочу достичь, очень похоже на этот другой пост https://askubuntu.com/questions/349262/run-a-nohup-command-over-ssh-then-disconnect но об этой ошибке nohup + node не упоминается.
Посмотрев на него, я понял, что, скорее всего, я делаю что-то не так в том, как я называю свой сценарий развертывания, но я действительно не понимаю, что это может быть. В сценарии обновления я пытался сделать nohup ./devops/deploy.sh & а не просто ./devops/deploy.sh но получил то же самое nohup: не удалось запустить команду «узел»: нет такого файла или каталога ошибка.
Если я помещу содержимое ./devops/deploy.sh сценарий внутри ssh ... << EOF <содержимое здесь> EOF Я также получаю то же самое nohup: не удалось запустить команду «узел»: нет такого файла или каталога ошибка


Переключил команду ssh на

экспортировать NVM_DIR="\$HOME/.nvm"
\. "\$NVM_DIR/nvm.sh"
\. "\$NVM_DIR/bash_completion"
компакт-диск с моим репозиторием
git тянуть
nohup ./devops/deploy.sh 1>api.stdout 2>api.stderr &
Рейтинг:1
флаг bd

Запуск исполняемого файла (в данном случае узел) путем простого указания его имени без пути требуется, чтобы файл находился в одном из каталогов, указанных в переменной окружения ДОРОЖКА. Точное содержимое этой переменной может варьироваться в зависимости от различных способов запуска оболочки, таких как интерактивный вход в систему или запуск скрипта. Твой узел исполняемый файл, вероятно, находится в каталоге, указанном в ДОРОЖКА при интерактивном входе в систему, но не при запуске скрипта.

В основном есть два способа решить эту проблему:

  1. Установить ДОРОЖКА переменную явно в начале вашего сценария, чтобы включить все каталоги, из которых сценарий намеревается запускать исполняемые файлы. Не забудьте включить /бин и /USR/бен потому что там находятся стандартные команды. Так, например, если ваш узел исполняемый файл находится в /opt/MyPrettyDevops/bin, вы бы добавили строку

    экспорт PATH=/bin:/usr/bin:/opt/MyPrettyDevops/bin
    
  2. Укажите путь к узел исполняемый явно, путем изменения нет линия к

    nohup /opt/MyPrettyDevops/bin/node runner.js &
    
ffigari avatar
флаг fr
Вот и все, я управляю узлом через nvm, и кажется, что вход в систему через ssh загрузит профиль bash, который затем загрузит nvm и узел. Пришлось вручную загружать nvm и node в скрипт. Затем мне пришлось следовать предложениям stdout/stdin для завершения вызова ssh.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.