Tự động khởi động máy chủ node.js khi khởi động


87

Bất kỳ chuyên gia node.js nào có thể cho tôi biết cách định cấu hình nút JS để tự động khởi động máy chủ khi máy của tôi khởi động không? Tôi đang sử dụng Windows


5
stackoverflow.com/questions/20426652/… Điều này khác với lần trước bạn hỏi như thế nào?
— WiredPrairie

1) Câu hỏi cuối cùng của bạn dành cho Winblows, câu trả lời sẽ hoàn toàn khác nhau tùy thuộc vào nền tảng; 2) nếu trên Linux, điều đơn giản nhất có lẽ được sử dụng người quản lý distro của bạn quá trình (sysvinit, mới nổi, systemd)
— TC1

Đáng tiếc là trên Winblows, chỉnh sửa để phản ánh điều này
— Bachalo

2
Vậy thì câu hỏi này có gì khác với câu hỏi khác của bạn?
— hexacyanide

1
Anh ấy không hài lòng với câu trả lời duy nhất cho câu hỏi cuối cùng, vì vậy anh ấy đã hỏi lại nó với một khoản tiền thưởng kèm theo.
— Nahn

Câu trả lời:


169

Đây hoàn toàn không phải là thứ để cấu hình trong node.js, đây hoàn toàn là trách nhiệm của hệ điều hành (trong trường hợp của bạn là Windows). Cách đáng tin cậy nhất để đạt được điều này là thông qua Dịch vụ Windows.

Có một mô-đun siêu dễ dàng này có thể cài đặt tập lệnh nút như một dịch vụ cửa sổ, nó được gọi là nút-cửa sổ ( npm , github , tài liệu ). Tôi đã sử dụng trước đây và làm việc như một sự quyến rũ.

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'Hello World',
  description: 'The nodejs.org example web server.',
  script: 'C:\\path\\to\\helloworld.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

ps

Tôi thấy nó hữu ích đến mức tôi đã xây dựng một trình bao bọc xung quanh nó thậm chí còn dễ sử dụng hơn ( npm , github ).

Cài đặt nó:

npm install -g qckwinsvc

Cài đặt dịch vụ của bạn:

> qckwinsvc
prompt: Service name: [name for your service]
prompt: Service description: [description for it]
prompt: Node script path: [path of your node script]
Service installed

Gỡ cài đặt dịch vụ của bạn:

> qckwinsvc --uninstall
prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled

Tôi đã nhận ra lỗi, nhưng nó đã làm việc vớinpm install qckwinsvc -g
— Adam Gerthel

1
"qckwinsvc" thật tuyệt vời. Cảm ơn vì tiền hỗ trợ.
— NLV

Không thành công trên win 10 chuyên nghiệp. Trình xem sự kiện: "Dịch vụ node-expjs-dev đã chấm dứt đột ngột."
— adi518

1
Rất tiếc, làm cách nào để gỡ lỗi ứng dụng của tôi mà không cần lời nhắc? Tôi biết người kiểm tra nút có thể hữu ích, nhưng gỡ lỗi bằng CMD có vẻ trực quan hơn.
— adi518

2
Tôi đã thử cài đặt ứng dụng node express dưới dạng dịch vụ và nó đang chạy (tôi nhận kết quả từ lệnh gọi console.log trong tệp * .out.log), nhưng khi tôi cố gắng nhận phản hồi từ máy chủ thông qua trình duyệt web của mình , Tôi vừa nhận lại được 404.
— sanderd17

91

Nếu bạn đang sử dụng Linux, macOS hoặc Windows pm2 là bạn của bạn. Đó là một trình quản lý quy trình xử lý các cụm rất tốt.

Bạn cài đặt nó:

npm install -g pm2

Bắt đầu một cụm, ví dụ, 3 quy trình:

 pm2 start app.js -i 3

Và làm cho pm2 khởi động chúng khi khởi động:

 pm2 startup

Nó có một API, thậm chí là một giao diện màn hình :

TUYỆT VỜI

Truy cập github và đọc hướng dẫn . Nó dễ sử dụng và rất tiện dụng. Điều tốt nhất kể từ mãi mãi .


2
thật không may trên windows 8
— Bachalo

3
Thưa ông, câu trả lời này xứng đáng nhận được nhiều ủng hộ hơn. Cảm ơn. Ngoài ra tôi muốn nói rằng pm2 startupcần một trong các thông số nền tảng này: <ubuntu|centos|gentoo|systemd>, ví dụ:
— sospedra

3
Tham số @Deerloper là không cần thiết. Từ trang chính thức của họ: $ pm2 startup # auto-detect platform $ pm2 startup [platform] # render startup-script for a specific platform, the [platform] could be one of: # ubuntu|centos|redhat|gentoo|systemd|darwin|amazon
— vorg

1
Điều này thật tuyệt vời và xứng đáng là câu trả lời hàng đầu cũng như có nhiều phiếu bầu hơn. Cám ơn vì cái này!
— ILikeTurtles

1
@baptx Nếu bạn đồng ý với UX systemd, điểm hấp dẫn chính của pm2 đó là tính di động hơn: các bản phân phối không dựa trên systemd, macOS và Windows.
— durum

31

Nếu tôi không nhầm, bạn có thể khởi động ứng dụng của mình bằng dòng lệnh và do đó cũng có thể sử dụng tệp lô. Trong trường hợp đó, khởi động nó bằng đăng nhập Windows không phải là một việc quá khó.

Bạn chỉ cần tạo một tệp hàng loạt với nội dung sau:

node C:\myapp.js

và lưu nó với phần mở rộng .bat. Đây myapp.js là ứng dụng của bạn, trong ví dụ này nằm trong C: drive (spcify the path).

Bây giờ, bạn chỉ có thể ném tệp hàng loạt vào thư mục khởi động của mình ở C: \ Users \% username% \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup

Chỉ cần mở nó bằng cách sử dụng% appdata% trong hộp run dailog và tìm đến> Chuyển vùng> Microsoft> Windows> Start Menu> Programs> Startup

Tệp lô sẽ được thực thi tại thời điểm đăng nhập và khởi động ứng dụng nút của bạn từ cmd.


2
Điều này hiệu quả, nhưng đó là cách của người nghèo. Câu trả lời từ những người cao dưới đây là tốt hơn. Cài đặt nó như một dịch vụ.
— MindJuice

7
@MindJuice Tôi đồng ý, mặc dù đó chỉ là một lối thoát dễ dàng nên tôi nghĩ nó đáng được nhắc đến.
— Chetan Bhasin

11
Ứng dụng của tôi cần chạy trên cả Linux và Windows, vì vậy giải pháp này hoạt động tốt hơn đối với tôi vì nó không yêu cầu tôi yêu cầu gói Windows cụ thể trong ứng dụng của mình. Chỉ vì một giải pháp đơn giản không làm cho nó trở thành một giải pháp tồi.
— Ryan Higgins

Trên thực tế, nó chỉ hoạt động nếu bạn đăng nhập vào máy. Tuy nhiên, đối với các mục đích mở rộng / CI (sản xuất env), điều này không hoạt động.
— João Bruno Abou Hatem de Liz

4

Điều này có thể dễ dàng được thực hiện theo cách thủ công với Windows Task Scheduler.

  • Đầu tiên, cài đặt mãi mãi .
  • Sau đó, tạo một tệp hàng loạt có chứa thông tin sau:

    cd C:\path\to\project\root
    call C:\Users\Username\AppData\Roaming\npm\forever.cmd start server.js
    exit 0
    
  • Cuối cùng, tạo một tác vụ đã lên lịch chạy khi bạn đăng nhập. Tác vụ này sẽ gọi tệp hàng loạt.


3

Tôi khuyên bạn nên cài đặt ứng dụng node.js của mình dưới dạng dịch vụ Windows, sau đó đặt dịch vụ này chạy khi khởi động. Điều đó sẽ giúp kiểm soát hành động khởi động dễ dàng hơn một chút bằng cách sử dụng phần mềm Windows Services thay vì phải thêm hoặc xóa hàng loạt tệp trong thư mục Khởi động.

Một câu hỏi khác liên quan đến dịch vụ trong Stackoverflow đã cung cấp một vài lựa chọn thực sự tốt (thực sự). Kiểm tra Cách cài đặt node.js dưới dạng Dịch vụ Windows . node-windows trông thực sự hứa hẹn với tôi. Ngoài ra, tôi đã sử dụng các công cụ tương tự cho các ứng dụng Java cần chạy dưới dạng dịch vụ. Nó làm cho cuộc sống của tôi dễ dàng hơn rất nhiều. Hi vọng điêu nay co ich.





0

Tôi biết có nhiều cách để đạt được điều này theo các giải pháp được chia sẻ ở trên. Tôi chưa thử tất cả chúng nhưng một số dịch vụ của bên thứ ba thiếu rõ ràng xung quanh tất cả các tác vụ đang được chạy trong nền là gì. Tôi đã đạt được điều này thông qua một tập lệnh powershell tương tự như tập lệnh được đề cập dưới dạng tệp loạt cửa sổ. Tôi đã lên lịch nó bằng cách sử dụng Windows Tasks Scheduler để chạy mỗi phút. Điều này đã khá hiệu quả và minh bạch cho đến nay. Lợi thế mà tôi có ở đây là tôi đang kiểm tra quy trình một cách rõ ràng trước khi bắt đầu lại. Điều này sẽ không gây ra nhiều chi phí cho CPU trên máy chủ. Ngoài ra, bạn không cần phải đặt tệp một cách rõ ràng vào các thư mục khởi động.

function CheckNodeService ()
{

$node = Get-Process node -ErrorAction SilentlyContinue

if($node)
{
    echo 'Node Running'
}
else
{
    echo 'Node not Running'
    Start-Process "C:\Program Files\nodejs\node.exe" -ArgumentList "app.js" -WorkingDirectory "E:\MyApplication"
    echo 'Node started'

}
}

CheckNodeService

-2

Được sao chép trực tiếp từ câu trả lời này :

Bạn có thể viết một tập lệnh bằng bất kỳ ngôn ngữ nào bạn muốn để tự động hóa việc này (thậm chí sử dụng nodejs) và sau đó chỉ cần cài đặt một lối tắt đến tập lệnh đó trong thư mục% appdata% \ Microsoft \ Windows \ Start Menu \ Programs \ Startup


4
Trong trường hợp này, hãy gắn cờ câu hỏi là một bản sao thay vì sao chép / dán câu trả lời tại đây.
— OlivierH 19/1213
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.