Tôi gặp sự cố khi cập nhật thư mục và triển khai lại nội dung của thư mục đó. Tôi phải sử dụng NodeJS và có cổng 8080 để sử dụng. Tôi cố gắng tạo tập lệnh php (update.php):
echo exec("git pull");
echo exec("node app.js");
?>
Bây giờ tôi muốn bắt đầu cập nhật tập lệnh NodeJS, với mục tiêu cuối cùng là có thể khởi động lại máy chủ.
Tôi sử dụng mô-đun tốc hành:
app.get('/Update', function(req,res) {
exec("php update.php", function(error, stdout, stderr) {
quá trình.exit(0);
}
}
Vấn đề là khi máy chủ NodeJS nhận được phản hồi từ tập lệnh nhưng tập lệnh cố gắng khởi động máy chủ NodeJS thì nó sẽ thoát. Điều này rõ ràng sẽ không xảy ra vì nó đã chạy trên cổng được chỉ định.
Bây giờ tôi đã tìm thấy trên google bằng cách sử dụng một mô-đun có tên là "nodemon" nhưng tôi không có quyền truy cập sudo nên không thể cài đặt nó. Các kết quả khác đang được sử dụng
nút grep ps |
giết -9 PROCESS_ID
Điều này cũng tạo ra vấn đề vì rất khó để định cấu hình tập lệnh PHP để tiêu diệt một tiến trình đã chỉ định, nhưng ngoài ra còn có các máy chủ NodeJS khác đang chạy trong các thư mục con khác của thư mục mẹ nhất định. Điều này có nghĩa là nếu tôi sử dụng "killall node", tôi sẽ khiến rất nhiều người tức giận vì tôi đã giết máy chủ của họ.
Cách tốt nhất để giải quyết vấn đề này là chỉ sử dụng cổng 8080 và muốn triển khai các thay đổi trong kho Github khi một liên kết được truy cập là gì?
Có thể chạy thông qua lệnh Node.jsquy trình.pid
Lấy id tiến trình của Node.
Sau đó, bạn có thể tạo một tập lệnh bash thực thi tất cả các lệnh và cung cấp PID trong một biến môi trường.
1) Quên cập nhật.php
2) Tuyến đường
app.get('/update', function(req, res) {
var spawn = require('child_process').spawn;
sinh sản('sh', [ 'update.sh' ], {
env: { NODE_PID: process.pid }
});
});
3) cập nhật.sh
kéo git
giết -9 $NODE_PID
nút app.js
Tôi là một lập trình viên xuất sắc, rất giỏi!