ฉันดาวน์โหลดไฟล์ปฏิบัติการnode.jsแล้ว ฉันจะเรียกใช้ไฟล์ปฏิบัติการนั้นเป็นบริการ Windows ได้อย่างไร ฉันไม่สามารถใช้โปรแกรมติดตั้ง node.js มาตรฐานได้เนื่องจากฉันต้องรัน node.js หลายเวอร์ชันพร้อมกัน
ฉันดาวน์โหลดไฟล์ปฏิบัติการnode.jsแล้ว ฉันจะเรียกใช้ไฟล์ปฏิบัติการนั้นเป็นบริการ Windows ได้อย่างไร ฉันไม่สามารถใช้โปรแกรมติดตั้ง node.js มาตรฐานได้เนื่องจากฉันต้องรัน node.js หลายเวอร์ชันพร้อมกัน
คำตอบ:
สายไปงานปาร์ตี้ แต่node-windowsก็ทำเคล็ดลับเช่นกัน
นอกจากนี้ยังมีการบันทึกระบบในตัว
มี API สำหรับสร้างสคริปต์จากโค้ดเช่น
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();
FD: ฉันเป็นผู้เขียนโมดูลนี้
ฉันพบว่าสิ่งนี้มีประโยชน์มากจนฉันสร้าง wrapper ที่ใช้งานง่ายกว่าเดิม ( npm , github )
การติดตั้ง:
npm install -g qckwinsvc
การติดตั้งบริการของคุณ:
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
การถอนการติดตั้งบริการของคุณ:
qckwinsvc - ถอนการติดตั้ง
prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
WinSerเป็นเสื้อคลุมที่เป็นมิตรกับ node.js รอบ ๆNSSM (Non-Sucking Service Manager)
ถัดไปฉันต้องการโฮสต์โหนดเป็นบริการเช่นเดียวกับ IIS วิธีนี้จะเริ่มต้นด้วยเครื่องของฉันทำงานในพื้นหลังรีสตาร์ทโดยอัตโนมัติหากเกิดปัญหาและอื่น ๆ
นี่คือที่ที่nssmตัวจัดการบริการที่ไม่ดูดเข้ามาในรูปภาพ เครื่องมือนี้ให้คุณโฮสต์. exe ปกติเป็นบริการ Windows
นี่คือคำสั่งที่ฉันใช้ในการตั้งค่าอินสแตนซ์ของแอปพลิเคชันโหนดของคุณเป็นบริการเปิด cmd ของคุณเช่นผู้ดูแลระบบและพิมพ์คำสั่งต่อไปนี้:
nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js net start service_name
ฉันไม่ได้ตอบคำถามโดยตรง แต่ให้ทางเลือกอื่นที่อาจตรงตามความต้องการของคุณในรูปแบบแฟชั่น node.js เพิ่มเติม
ความต้องการตามหน้าที่คือ:
ข้อกำหนดเหล่านี้สามารถตอบสนองได้โดยใช้ตัวจัดการกระบวนการ (PM) และทำให้ตัวจัดการกระบวนการเริ่มต้นเมื่อเริ่มต้นระบบ PM ที่ดีสองรายการที่เหมาะกับ Windows ได้แก่ :
ในการทำให้ PM เริ่มโดยอัตโนมัติวิธีที่ง่ายที่สุดคือสร้างงานตามกำหนดเวลาโดยใช้ทริกเกอร์ "At Startup":
pm2
ใช้สคริปต์แบตช์ในการเริ่มต้นตรวจสอบให้แน่ใจว่าได้รวมตัวแปรสภาพแวดล้อมไม่เช่นนั้นจะไม่ทำงาน
วิธีจัดการกระบวนการ + ตัวกำหนดตารางเวลางานที่ฉันโพสต์เมื่อปีที่แล้วทำงานได้ดีกับการติดตั้งบริการแบบครั้งเดียว แต่เมื่อไม่นานมานี้ฉันเริ่มออกแบบระบบในรูปแบบไมโครเซอร์วิสโดยมีบริการเล็ก ๆ มากมายที่พูดคุยกันผ่าน IPC ดังนั้นการกำหนดค่าแต่ละบริการด้วยตนเองจึงไม่สามารถทนทานได้
เพื่อเป้าหมายในการติดตั้งบริการโดยไม่ต้องกำหนดค่าด้วยตนเองฉันได้สร้างsermanซึ่งเป็นเครื่องมือบรรทัดคำสั่ง (ติดตั้งด้วยnpm i -g serman
) เพื่อติดตั้งไฟล์ปฏิบัติการเป็นบริการ สิ่งที่คุณต้องเขียน (และเขียนเพียงครั้งเดียว) คือไฟล์การกำหนดค่าบริการที่เรียบง่ายพร้อมกับปฏิบัติการของคุณ วิ่ง
serman install <path_to_config_file>
จะติดตั้งบริการ stdout
และstderr
เข้าสู่ระบบทั้งหมด สำหรับข้อมูลเพิ่มเติมโปรดดูที่การเว็บไซต์โครงการ
ไฟล์กำหนดค่าที่ใช้งานได้นั้นง่ายมากดังที่แสดงด้านล่าง แต่ยังมีคุณสมบัติที่มีประโยชน์มากมายเช่น<env>
และ<persistent_env>
ด้านล่าง
<service>
<id>hello</id>
<name>hello</name>
<description>This service runs the hello application</description>
<executable>node.exe</executable>
<!--
{{dir}} will be expanded to the containing directory of your
config file, which is normally where your executable locates
-->
<arguments>"{{dir}}\hello.js"</arguments>
<logmode>rotate</logmode>
<!-- OPTIONAL FEATURE:
NODE_ENV=production will be an environment variable
available to your application, but not visible outside
of your application
-->
<env name="NODE_ENV" value="production"/>
<!-- OPTIONAL FEATURE:
FOO_SERVICE_PORT=8989 will be persisted as an environment
variable machine-wide.
-->
<persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>