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 &