Điểm:0

`nohup: không thể chạy lệnh 'nút': Không có tệp hoặc thư mục như vậy` khi chạy tập lệnh qua ssh

lá cờ fr

Tôi có một máy chủ từ xa mà tôi phục vụ một máy chủ web bằng cách sử dụng nút (express) và nginx. tôi có một ./devops/deploy.sh tập lệnh khởi động máy chủ web và khởi động lại nginx. Tập lệnh đã nói hoạt động chính xác nếu tôi kết nối thủ công với phiên bản (ssh <người dùng>@<ip>) rồi chạy

cd my-repo
kéo git
./devops/deploy.sh

Tuy nhiên, tôi không thể thiết lập tập lệnh tự động hóa việc này. Tôi đã thử với kịch bản này

#!/bin/bash
đặt -euo đường ống thất bại

cách sử dụng() {
  con mèo << EOF
Cách sử dụng: ./devops/update-instance.sh <user@ip>
EOF
  thoát -1
}

CONNECTION_STRING=${1:-""}

nếu [ -z $CONNECTION_STRING ]; sau đó
  cách sử dụng
fi

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

nhưng nó mang lại cho tôi Nohup: không thể chạy lệnh 'nút': Không có tệp hoặc thư mục như vậy. Đây là tập lệnh triển khai mà tôi đang chạy cục bộ từ máy của mình

#!/bin/bash
đặt -euo đường ống thất bại

lsof -ti:3000 && giết $(lsof -ti:3000)
thanh vang
tiếng vang $(nút -v)
nohup nút 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 tải lại

nút runner.js chỉ cần bắt đầu một ứng dụng cấp tốc, vì vậy không có gì lạ ở đó.

Những gì tôi muốn đạt được rất giống với bài đăng khác này https://askubuntu.com/questions/349262/run-a-nohup-command-over-ssh-then-disconnect nhưng không đề cập đến lỗi Nohup + nút này.
Sau khi xem xét nó, tôi nhận ra rằng rất có thể tôi đã làm sai điều gì đó trong cách gọi tập lệnh triển khai của mình nhưng tôi thực sự không hiểu nó có thể là gì. Trong tập lệnh cập nhật, tôi đã thử làm Nohup ./devops/deploy.sh & thay vì đơn giản ./devops/deploy.sh nhưng nhận được như nhau Nohup: không thể chạy lệnh 'nút': Không có tệp hoặc thư mục như vậy lỗi.
Nếu tôi đặt nội dung của ./devops/deploy.sh kịch bản bên trong ssh ... << EOF <nội dung ở đây> EOF tôi cũng nhận được như vậy Nohup: không thể chạy lệnh 'nút': Không có tệp hoặc thư mục như vậy lỗi


Đã chuyển lệnh ssh thành

xuất NVM_DIR="\$HOME/.nvm"
\. "\$NVM_DIR/nvm.sh"
\. "\$NVM_DIR/bash_completion"
cd my-repo
kéo git
Không có gì ./devops/deploy.sh 1>api.stdout 2>api.stderr &
Điểm:1
lá cờ bd

Chạy một tập tin thực thi (trong trường hợp này, nút) bằng cách chỉ cần đặt tên của nó mà không có đường dẫn yêu cầu tệp nằm trong một trong các thư mục được chỉ định trong biến môi trường CON ĐƯỜNG. Nội dung chính xác của biến đó có xu hướng khác nhau giữa các cách chạy trình bao khác nhau, chẳng hạn như đăng nhập tương tác hoặc bắt đầu tập lệnh. Của bạn nút thực thi có thể nằm trong một thư mục được liệt kê trong CON ĐƯỜNG khi bạn đăng nhập một cách tương tác, nhưng không phải nếu bạn chạy tập lệnh của mình.

Về cơ bản có hai cách để giải quyết vấn đề này:

  1. Đặt CON ĐƯỜNG rõ ràng ở đầu tập lệnh của bạn để bao gồm tất cả các thư mục mà từ đó tập lệnh dự định chạy các tệp thực thi. Đừng quên bao gồm /thùng rác/usr/bin bởi vì đó là nơi chứa các lệnh tiêu chuẩn. Vì vậy, ví dụ, nếu bạn nút thực thi nằm trong /opt/MyPrettyDevops/bin, bạn sẽ thêm dòng

    xuất PATH=/bin:/usr/bin:/opt/MyPrettyDevops/bin
    
  2. Chỉ định đường dẫn đến nút thực thi một cách rõ ràng, bằng cách thay đổi nohup dòng đến

    Nohup /opt/MyPrettyDevops/bin/node runner.js &
    
ffigari avatar
lá cờ fr
Vậy đó, tôi đang quản lý nút qua nvm và có vẻ như đăng nhập qua ssh sẽ tải hồ sơ bash, sau đó sẽ tải nvm và nút. Phải tải thủ công nvm và nút trong tập lệnh. Sau đó, tôi phải làm theo các đề xuất thiết bị xuất chuẩn/stdin để cuộc gọi ssh kết thúc.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.