পটভূমি পরিষেবা হিসাবে আমি কীভাবে একটি নোড.জেএস অ্যাপ্লিকেশন চালাব?


502

যেহেতু এই পোস্টটি বছরের পর বছর ধরে অনেক মনোযোগ অর্জন করেছে, তাই আমি এই পোস্টের নীচে প্ল্যাটফর্মের শীর্ষ সমাধানগুলি তালিকাভুক্ত করেছি।


আসল পোস্ট :

আমি আমার নোড.জেএস সার্ভারটি ব্যাকগ্রাউন্ডে চলতে চাই, যেমন: আমি যখন আমার টার্মিনালটি বন্ধ করি আমি চাই যে আমার সার্ভারটি চলমান থাকবে। আমি এটি গুগল করেছি এবং এই টিউটোরিয়ালটি নিয়ে এসেছি , তবে এটি ইচ্ছাকৃতভাবে কাজ করে না। সুতরাং সেই ডিমন স্ক্রিপ্টটি ব্যবহার করার পরিবর্তে, আমি ভেবেছিলাম যে আমি কেবলমাত্র আউটপুট পুনর্নির্দেশটি ব্যবহার করেছি the2>&1 >> file অংশ) ব্যবহার করেছি, তবে এটিও প্রস্থান করে না - আমি আমার টার্মিনালে একটি ফাঁকা লাইন পাই, যেমন এটি আউটপুট / ত্রুটির জন্য অপেক্ষা করে।

আমি প্রক্রিয়াটিকে ব্যাকগ্রাউন্ডে রাখার চেষ্টা করেছি, তবে আমি আমার টার্মিনালটি বন্ধ করার সাথে সাথে প্রক্রিয়াটিও মারা যায়।

সুতরাং আমি যখন আমার স্থানীয় কম্পিউটারটি বন্ধ করে দেব তখন এটি কীভাবে চলতে পারি?


শীর্ষ সমাধান :


3
আমি মনে করি তিনি তার স্থানীয় সিস্টেমটি বন্ধ করতে চেয়েছিলেন
কামাল রেড্ডি

46
তার অর্থ একটি ssh অধিবেশন বন্ধ করা কাজটি শেষ করে
thejaney

5
github.com/Unitech/pm2 একটি অত্যন্ত রক্ষণাবেক্ষণ করা এবং খুব স্থিতিশীল প্রক্রিয়া পরিচালক, চেষ্টা করে দেখুন!
ইউনিটেক

1
আপনি পর্দা ব্যবহার করতে পারেন ( aperiodic.net/screen/quick_references )
করানটান

উত্তর:


433

আমার নিজের উত্তর অনুলিপি থেকে আমি কীভাবে তার নিজস্ব প্রক্রিয়া হিসেবে একটি Node.js আবেদন চালানো?

2015 এর উত্তর : প্রায় প্রতিটি লিনাক্স ডিস্ট্রো সিস্টেমডের সাথে আসে, যার অর্থ চিরকালের জন্য, মনিট, পিএম 2 ইত্যাদির আর দরকার নেই - আপনার ওএস ইতিমধ্যে এই কাজগুলি পরিচালনা করে

একটি myapp.serviceফাইল তৈরি করুন (স্পষ্টতই আপনার অ্যাপের নামের সাথে 'myapp' প্রতিস্থাপন করুন):

[Unit]
Description=My app

[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nogroup
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp

[Install]
WantedBy=multi-user.target

আপনি যদি ইউনিক্সে নতুন হন তবে দ্রষ্টব্য: খুব প্রথম লাইনে /var/www/myapp/app.jsথাকা উচিত #!/usr/bin/env node

আপনার পরিষেবা ফাইলটি অনুলিপি করুন /etc/systemd/system

এটি দিয়ে শুরু করুন systemctl start myapp

এটি দিয়ে বুটে চালাতে সক্ষম করুন systemctl enable myapp

সঙ্গে লগ দেখুন journalctl -u myapp

লিনাক্স, 2018 সংস্করণে আমরা কীভাবে নোড অ্যাপ্লিকেশন স্থাপন করি তা থেকে নেওয়া হয়েছে , এতে লিনাক্স / নোড সার্ভারগুলি ( .serviceফাইল সহ ) তৈরি করার জন্য একটি এডাব্লুএস / ডিজিটালঅ্যাসন / অ্যাজুরে ক্লাউডকনফিগ তৈরির আদেশও অন্তর্ভুক্ত রয়েছে ।


4
আপস্টার্ট, যখন উপলব্ধ হয় একটি ভাল সমাধান। যে কোনও উপায়ে আপনার নোডেজ ডিমন চালিয়ে যাওয়ার জন্য আপনাকে নোডেজ প্রক্রিয়াটির উপর নির্ভর করা উচিত নয়। এটি কেবল ওএসের জন্য একটি কাজ। কিল্ল নোডেজ এবং চিরতরে চলে যায় ....
131

19
মনে রাখবেন যে ব্যবহারকারী হিসাবে সিস্টেমড পরিষেবাদি চালানোও সম্ভব। উদাহরণস্বরূপ দেখুন এই টিউটোরিয়াল । আপনি আপনার পরিষেবা ফাইলটি এতে স্থাপন করতে পারেন ~/.config/systemd/user, এটি দিয়ে এটি শুরু করতে পারেন , এটি দিয়ে systemctl --user start myappসক্ষম করতে পারেন systemctl --user enable myapp
সিডিউথ

5
এই উত্তরের জন্য ধন্যবাদ। এটি আমি খাঁটি এবং পরিষ্কার চাই
bmavus

5
আমি এই উত্তরটি "চিরকালের" জবাবের পরিবর্তে গ্রহণ করেছি, যেহেতু আমিও মনে করি এটি করা সবচেয়ে ভাল উপায়। ম্যাক এবং উইন্ডোজের জন্য একই রকম উত্তর রয়েছে তবে আমি অনুমান করছি যে সংখ্যাগরিষ্ঠ একটি লিনাক্স সমাধান খুঁজছেন।
পিটার ক্রুইথফ

11
ইসি 2 এএমআই পথে / etc / systemd / সিস্টেম বিদ্যমান নেই। আপনি কী বলতে পারেন যে এডাব্লুএস ইসি 2 লিনাক্স এএমআইয়ের সঠিক পথটি?
রেনি মিশেল

241

প্রদত্ত নোড স্ক্রিপ্ট অবিচ্ছিন্নভাবে চলমান (যেমন চিরকাল): এটি নিশ্চিত করার জন্য আপনি ফোরএভার, একটি সাধারণ সিএলআই সরঞ্জাম ব্যবহার করতে পারেন: https://www.npmjs.org/package/forever


4
সর্বশেষ নোডের সাহায্যে আমি স্ক্রিপ্ট নাম (ত্রুটি) - এর মাধ্যমেও কোনও অ্যাপ্লিকেশন থামাতে পারিনি - এছাড়াও - সাধারণত দুর্ব্যবহার (ওএস-এক্স-এ ছিল) - সমস্ত উত্স থেকে উদ্ভটভাবে তৈরি built জিনিসগুলি খারাপ অবস্থায় ফেলেছে, আমার আত্মবিশ্বাস পূর্ণ হয় নি।
মাইকেল নীল

4
যদিও নোহুপ কৌশলটি চালায়, চিরকালের জন্য এটি আরও কার্যকর সমাধান হিসাবে এটি প্রক্রিয়াটিকে ডেমোনাইজ করে। দুর্দান্ত সরঞ্জাম!
পিটার ক্রুইথফ


2
আমি কিছু সময়ের জন্য চিরকাল ব্যবহার করেছি, শুরুতে সবকিছু ঠিক আছে বলে মনে হচ্ছে তবেই ঘটেছিল বিপর্যয়। চিরকাল আর প্রক্রিয়াগুলি পরিচালনা করতে পারেনি এবং তাদের বুনো চালাতে দিন। এখনও আরও ভাল সমাধানের জন্য লড়াই করা। আমি নোহুপ ব্যবহার করার চেষ্টা করব
এলএন

5
জিওফ্রে - না, আপনাকে forever start /path/to/yourApp.jsআপনার সার্ভার স্টার্টআপ স্ক্রিপ্টে করতে হবে।
মিকর্ম্কনিল

215

আপডেট - নীচের উত্তরের একটিতে উল্লিখিত হিসাবে, পিএম 2 এর কিছু সত্যিকারের দুর্দান্ত কার্যকারিতা চিরকালের জন্য অনুপস্থিত। এটি ব্যবহার বিবেচনা করুন।

আসল উত্তর

নোহপ ব্যবহার করুন :

nohup node server.js &

সম্পাদনা করুন আমি যুক্ত করতে চেয়েছিলাম যে গৃহীত উত্তরটি আসলেই যাওয়ার উপায়। আমি চিরকালের জন্য এমন উদাহরণগুলিতে ব্যবহার করছি যা চালিয়ে যাওয়া দরকার। আমি npm install -g foreverএটি করতে পছন্দ করি এটি নোডের পথে এবং তারপরে ঠিক তাইforever start server.js


136
শীতল অংশটি nohupজানার জন্য : এর অর্থ no hangupপুরানো দিনগুলি থেকে আসে, যেখানে আপনি আপনার মডেমটিকে "হ্যাঙ্গআপ" দেওয়ার সময় আপনি কোনও প্রক্রিয়াটি বাঁচিয়ে রাখতে চেয়েছিলেন।
jAndy

1
আজকাল এটি বরং সিগন্যাল 1 এর নাম যা প্রক্রিয়াটি সতর্ক করার জন্য গ্রহণ করে যে ব্যবহারকারী শেলটি বন্ধ করেছে (বা অবশ্যই মডেমের সংযোগটি হারিয়েছে: অবশ্যই)
lapo

7
এটি সেরা সমাধান নয় কারণ অ্যাপ্লিকেশনটি যদি একটি অনাবৃত ত্রুটির মুখোমুখি হয় তবে নোড প্রক্রিয়াটি প্রস্থান করবে এবং পুনরায় আরম্ভ হবে না। তবুও, এটি উন্নয়নের জন্য একটি যুক্তিসঙ্গত বিকল্প।
অ্যান্ডি ই

1
আমি কীভাবে পরিবেশগত পরিবর্তনগুলি যুক্ত করব? যেমন: port = 80 নোড server.js
মার্জনাকারী

1
এই উত্তরটি এসও - স্ট্যাকওভারফ্লো
.

67

এটি গ্রহণযোগ্য উপায় নাও হতে পারে তবে আমি এটি পর্দা দিয়ে করি, বিশেষত বিকাশের সময় কারণ কারণ আমি এটিকে ফিরিয়ে আনতে পারি এবং প্রয়োজনে এটি বোকা বানাতে পারি।

screen
node myserver.js
>>CTRL-A then hit D

স্ক্রীনটি আপনাকে লগিং বন্ধ করার পরে বিচ্ছিন্ন হয়ে যাবে survive তারপরে আপনি এটিকে আবার স্ক্রিন-আর করে ফিরে পেতে পারেন। আরও তথ্যের জন্য স্ক্রিন ম্যানুয়াল আপ করুন। আপনি পর্দাগুলির নাম দিতে পারেন এবং আপনি যদি পছন্দ করেন তবে কী নন।


2
এছাড়াও, tmux দুর্দান্ত। স্ক্রিনের মতো কাজ করে (সিটিআরএল-বি সিটিআরএল-এ পরিবর্তে ডিফল্ট, তবে কনফিগারযোগ্য)। টিএমাক্সের প্যানেল রয়েছে (বিভক্ত স্ক্রিন)।
স্ন্যাপফ্র্যাক্টলপপ

1
স্ক্রিনে প্যানেলও রয়েছে
বিলি মুন

আমি একটি উল্কা অ্যাপ্লিকেশনটির জন্য কয়েক সপ্তাহ ধরে এটি ব্যবহার করছি। aching aching স্ক্রিন-ডিআর 'বিচ্ছিন্ন করার জন্য এবং পুনঃনির্ধারণের জন্য মাঝে মাঝে প্রয়োজন হতে পারে।
বিনয় ভেমুলা

আমার কাছে কাজটি করার সহজতম উপায়। তবে আমি একমত, সর্বোত্তম সমাধান নয়
পমমে দে তেরে

সিস্টেমটি পুনরায় চালু হওয়ার পরেও এই সমাধানটি স্থির থাকে না
wnasich

60

2016 আপডেট: নোড-উইন্ডোজ / ম্যাক / লিনাক্স সিরিজটি সমস্ত অপারেটিং সিস্টেম জুড়ে একটি সাধারণ এপিআই ব্যবহার করে, সুতরাং এটি একেবারে প্রাসঙ্গিক সমাধান। যাহোক; নোড-লিনাক্স systemv init ফাইল উত্পন্ন করে। সিস্টেমেড জনপ্রিয়তার সাথে বাড়তে থাকায় এটি লিনাক্সের পক্ষে আরও ভাল বিকল্প option কেউ নোড-লিনাক্সে সিস্টেমড সমর্থন যোগ করতে চাইলে জনগণের স্বাগত :-)

আসল থ্রেড:

এটি এখন বেশ পুরানো থ্রেড, তবে নোড-উইন্ডোজ উইন্ডোজে ব্যাকগ্রাউন্ড পরিষেবাদি তৈরির অন্য উপায় সরবরাহ করে। এটি আপনার নোড স্ক্রিপ্টের চারপাশে মোড়ক nssmব্যবহারের ধারণার উপর ভিত্তি করে exe। যাহোক; এটি winsw.exeপরিবর্তে ব্যবহার করে এবং কীভাবে ব্যর্থতাগুলিতে প্রক্রিয়া শুরু হয় / বন্ধ হয় তার উপরে আরও দানাদার নিয়ন্ত্রণের জন্য একটি কনফিগারযোগ্য নোড র্যাপার সরবরাহ করে। এই প্রক্রিয়াগুলি অন্য যে কোনও পরিষেবার মতো উপলব্ধ:

এখানে চিত্র বর্ণনা লিখুন

মডিউলটি কিছু ইভেন্ট লগিংয়েও বেক করে:

এখানে চিত্র বর্ণনা লিখুন

আপনার স্ক্রিপ্ট ডিমনাইজিং কোডের মাধ্যমে সম্পন্ন হয়। উদাহরণ স্বরূপ:

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\\my\\node\\script.js'
});

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

// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
  console.log(svc.name+' started!\nVisit http://127.0.0.1:3000 to see it in action.');
});

// Install the script as a service.
svc.install();

মডিউলটি ক্যাপিং পুনঃসূচনাগুলির মতো জিনিসগুলিকে সমর্থন করে (যাতে খারাপ স্ক্রিপ্টগুলি আপনার সার্ভারটিকে হোস করে না) এবং পুনরায় আর্টসের মধ্যে সময়ের ব্যবধান বাড়ছে।

যেহেতু নোড-উইন্ডোজ পরিষেবাদি অন্যগুলির মতো চলমান, আপনি ইতিমধ্যে যে সফ্টওয়্যারটি ব্যবহার করেন সেটির সাথে পরিষেবাটি পরিচালনা / নিরীক্ষণ করা সম্ভব।

অবশেষে, কোনও makeনির্ভরতা নেই। অন্য কথায়, একটি সোজাnpm install -g node-windows কাজ করবে। এটি ইনস্টল করতে আপনার ভিজ্যুয়াল স্টুডিও,। নেট, বা নোড-জিপ যাদুবিদ্যার প্রয়োজন নেই। এছাড়াও, এটি এমআইটি এবং বিএসডি লাইসেন্সযুক্ত।

সম্পূর্ণ প্রকাশে, আমি এই মডিউলটির লেখক। এটি ওপি-র অভিজ্ঞতার যথাযথ ব্যথা উপশমের জন্য ডিজাইন করা হয়েছিল, তবে অপারেটিং সিস্টেম ইতিমধ্যে সরবরাহ করে এমন কার্যকারিতার সাথে আরও কঠোর সংহতকরণের মাধ্যমে। আমি আশা করি একই প্রশ্নের ভবিষ্যত দর্শকদের এটি দরকারী বলে মনে হয়েছে।


8
আমি এখন নোড-ম্যাক এ পোর্ট করেছি , ওএসএক্স-তে একই কার্যকারিতা সরবরাহ করে।
কোরি

1
আমি কয়েক নোড প্রোগ্রামের সময়সূচী তৈরি করতে এসেছি এবং নোড-উইন্ডোজ, ফোরএভার বা কিউ বেছে নেওয়ার সিদ্ধান্তের সামনে দাঁড়াচ্ছি। আমি নোড-উইন্ডোগুলির দিকে ঝুঁকছি তবে আমি বুঝতে চাইছি যখন আমি নোডের কয়েকটি ডজন প্রোগ্রাম শিডিউল এবং নিরীক্ষণ করতে চাইছি তখন কেন ফরভার বা কিউ ব্যবহার করবেন না। কেউ কেউ চিরকালের জন্য ছুটে চলেছে। নিরীক্ষণও দরকার।
খ্রিস্টিয়ান ওয়েস্টারবিক

5
নোড-উইন্ডোজগুলি ব্যাকগ্রাউন্ড পরিষেবাদি পরিচালনার জন্য নেটিভ ওএস এবং লগিংয়ের জন্য নেটিভ ইভেন্ট লগ ব্যবহার করে। সর্বদা এর নিজস্ব কাস্টম মনিটরিং এবং লগিং রয়েছে। আমি মিডিয়াম . com/p/2a602ea657a2 এ এ সম্পর্কে একটি নিবন্ধ লিখেছি মনে হচ্ছে আপনার পর্দাটি আপনার সময়সূচী তৈরি করা দরকার, ব্যাকগ্রাউন্ড পরিষেবা হিসাবে সর্বদা চালানো উচিত নয়। কিউ এবং এজেন্ডার মতো প্রকল্পগুলি এটির জন্য ডিজাইন করা হয়েছে। নোড-উইন্ডোজ এবং চিরকাল একটি ভিন্ন উদ্দেশ্যে পরিবেশন করে।
কোরি

1
@ কোরি, নোড-ম্যাকের অন্তর্ভুক্ত উদাহরণটি আমি কীভাবে চালাব?, টার্মিনাল থেকে, আমি নোড ইনস্টল.জেএস চেষ্টা করেছি, তবে এটি হেলিওর্ল্ড জেজে-তে নেওয়ার মতো মনে হচ্ছে না
এডউইন ইকেচুকু ওকনকভো

@ এডউইন - আপনি যে কোডটি ব্যবহার করছেন তা সহ সমস্যা সম্পর্কিত আরও বিশদ সহ একটি নতুন প্রশ্ন খোলার পক্ষে সেরা হতে পারে।
কোরি

28

আপডেট : আমি পিএম 2 থেকে সর্বশেষটি অন্তর্ভুক্ত করতে আপডেট করেছি:

অনেকগুলি ব্যবহারের ক্ষেত্রে, সিস্টেমযুক্ত পরিষেবা ব্যবহার করা নোড প্রক্রিয়া পরিচালনা করার সহজতম এবং সবচেয়ে উপযুক্ত উপায়। যারা একক পরিবেশে অসংখ্য নোড প্রক্রিয়া চালাচ্ছেন বা স্বতন্ত্রভাবে নোড মাইক্রোসার্কেস চালাচ্ছেন তাদের জন্য, পিএম 2 একটি আরও সম্পূর্ণ বৈশিষ্ট্যযুক্ত সরঞ্জাম।

https://github.com/unitech/pm2

http://pm2.io

  • এর সাথে একাধিক প্রক্রিয়া কমান্ড লাইন পর্যবেক্ষণ pm2 monitবা প্রক্রিয়া তালিকার সাথে প্রিন্ট 'গুই' রয়েছে - এটিতে কার্যকরভাবে দরকারী পর্যবেক্ষণ বৈশিষ্ট্য রয়েছেpm2 list
  • সংগঠিত লগ পরিচালনা -> pm2 logs
  • অন্যান্য উপাদান:
    • আচরণ কনফিগারেশন
    • উত্স মানচিত্র সমর্থন
    • PaaS সামঞ্জস্যপূর্ণ
    • দেখুন ও পুনঃলোড করুন
    • মডিউল সিস্টেম
    • সর্বোচ্চ মেমরি পুনরায় লোড
    • ক্লাস্টার মোড
    • গরম পুনরায় লোড
    • উন্নয়ন কর্মপ্রবাহ
    • স্টার্টআপ স্ক্রিপ্ট
    • অটো সমাপ্তি
    • স্থাপনার কর্মপ্রবাহ work
    • কীমেট্রিক্স নিরীক্ষণ
    • এপিআই

19

আপনি যদি ওএসএক্স চালাচ্ছেন, তবে প্রকৃত সিস্টেম প্রক্রিয়া তৈরির সহজতম উপায় হ'ল launchdএটি চালু করার জন্য।

এটির মতো একটি প্লিস্ট তৈরি করুন এবং এটি নামের সাথে / লাইব্রেরি / লঞ্চডেমনগুলিতে রাখুন top-level-domain.your-domain.application.plist(এটি স্থাপন করার সময় আপনার রুট হওয়া দরকার):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>top-level-domain.your-domain.application</string>

    <key>WorkingDirectory</key>
    <string>/your/preferred/workingdirectory</string>

    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/node</string>
        <string>your-script-file</string>
    </array>

    <key>RunAtLoad</key>
    <true/>

    <key>KeepAlive</key>
    <true/>

</dict>
</plist>

হয়ে গেলে, এটি (মূল হিসাবে) ইস্যু করুন:

launchctl load /Library/LaunchDaemons/top-level-domain.your-domain.application.plist
launchctl start top-level-domain.your-domain.application

এবং আপনি দৌড়াচ্ছেন।

এবং আপনি এখনও পুনরায় চালু হওয়ার পরে চলবেন।

প্লাস্টের অন্যান্য বিকল্পগুলির জন্য ম্যান পৃষ্ঠাটি দেখুন এখানে: https://developer.apple.com/library/mac/docamentation/Darwin/References/Manpages/man5/launchd.plist.5.html


কোন ব্যবহারকারী এই পরিষেবাটি চালাবেন? ব্যবহারকারী সেট করার কোন উপায় আছে?
rjmunro

19

যদি আপনি কেবল স্ক্রিপ্টটি নিরবচ্ছিন্নভাবে চালাতে চান তবে এটি সম্পূর্ণ না হওয়া পর্যন্ত আপনি nohupএখানে উত্তরগুলিতে ইতিমধ্যে উল্লিখিত হিসাবে ব্যবহার করতে পারেন । যাইহোক, উত্তর কেউ একটি পূর্ণ কমান্ড যে লগ প্রদান stdinএবং stdout

nohup node index.js >> app.log 2>&1 &
  • >>মানে লিখবেন app.log
  • 2>&1নিশ্চিত করে যে ত্রুটিগুলিও প্রেরণ করা হয়েছে stdoutএবং এতে যুক্ত হয়েছেapp.log
  • শেষটি &নিশ্চিত করে যে আপনার বর্তমান টার্মিনালটি কমান্ড থেকে সংযোগ বিচ্ছিন্ন হয়েছে যাতে আপনি কাজ চালিয়ে যেতে পারেন।

আপনি যদি নোড সার্ভারটি চালাতে চান (বা সার্ভার পুনরায় চালু হওয়ার সাথে সাথে ব্যাক আপ শুরু করা উচিত) আপনার সিস্টেমড / সিস্টেমটেল ব্যবহার করা উচিত ।


1
সেরা উত্তর m8।
ভোলাগব্বর

1
সুন্দরভাবে ব্যাখ্যা করা
প্রখর প্রকাশ ভরদ্বাজ

15

আপনি যদি nohup ব্যবহার করে থাকেন তবে এই কমান্ডটি চালনার চেষ্টা করুন -

nohup npm start 2>/dev/null 1>/dev/null&

আপনি সার্ভার শুরু করতে চিরকালের জন্য ব্যবহার করতে পারেন

forever start -c "npm start" ./ 

পিএম 2 সমর্থন করে npm start

pm2 start npm -- start

2
আর, এটি পুরোপুরি কাজ করেছে। pm2 start npm -- start
ইয়াদাবর

13

আমি কেবল ডিমন এনপিএম মডিউলটি ব্যবহার করছি :

var daemon = require('daemon');

daemon.daemonize({
    stdout: './log.log'
  , stderr: './log.error.log'
  }
, './node.pid'
, function (err, pid) {
  if (err) {
    console.log('Error starting daemon: \n', err);
    return process.exit(-1);
  }
  console.log('Daemonized successfully with pid: ' + pid);

  // Your Application Code goes here
});

ইদানীং আমি সহজ নোড অ্যাপ্লিকেশনগুলি শুরু করতে ও পরিচালনা করতে টিজে হলোয়াইকুক থেকে সোম (1) ব্যবহার করছি ।


12

উন্নয়নের জন্য আমি সুপারভাইজারকে ব্যবহার করি। এটা ঠিক কাজ করে। যখনই আপনি একটি .js ফাইলে পরিবর্তন করেন সুপারভাইজার স্বয়ংক্রিয়ভাবে আপনার অ্যাপ্লিকেশনটি সেই লোড হওয়া লোডগুলির সাথে পুনরায় চালু করে।

এটির গিথুব পৃষ্ঠায় একটি লিঙ্ক এখানে

ইনস্টল করুন:

sudo এনপিএম ইনস্টল সুপারভাইজার -জি

আপনি এটিকে সহজেই -e সহ অন্যান্য এক্সটেনশনগুলি দেখতে পারেন। আমি যে অন্য কমান্ডটি প্রায়শই ব্যবহার করি তা হ'ল নির্দিষ্ট ফোল্ডার উপেক্ষা করার জন্য।

আপনি লগ আউট করার পরেও আপনার নোড অ্যাপটিকে ব্যাকগ্রাউন্ডে চালিত করতে নোহপ এবং সুপারভাইজার ব্যবহার করতে পারেন।

সুডো নোহপ সুপারভাইজার myapp.js &


1
আমি মনে করি অনুশীলনে সুপারভাইজারটি বেশিরভাগ ডিমন মডিউলগুলির চেয়ে একটি ভাল বিকল্প, বিশেষত আপডেটগুলি চেকআউট করার জন্য একটি ওয়েবহুকের সাথে ব্যবহার করে।
আয়েন কলিন্স

আমি এই দ্বিতীয়। আপনি যদি পিএইচপি ফাইলগুলি পরিবর্তন করেন তবে আপনি কি অ্যাপাচি বা এনগিনেক্স সার্ভারটি পুনরায় চালু করবেন? অবশ্যই না. তাহলে কেন পুরো নোড.জেএস সার্ভারটি পুনরায় চালু করতে বিরক্ত করছেন এমনকি কোডের একটি লাইনও পরিবর্তন করছেন? যদিও এটি সর্বোত্তম সমাধান নাও হতে পারে তবুও সুপারভাইজারের সাথে ইজারা নেওয়ার ক্ষেত্রে আপনাকে পুনরায় চালু করার প্রক্রিয়াটি সম্পর্কে চিন্তা করার দরকার নেই (আসলে পুনরায় চালু হওয়া এখনও ঘটে)।
ঝাং বাজ

7

উইন্ডোস এক্সপি-তে একটি পটভূমি পরিষেবা হিসাবে নোড.জেস

স্থাপন:

  1. WGET ইনস্টল করুন ইনস্টলারের মাধ্যমে এক্সিকিউটেবলের মাধ্যমে http://gnuwin32.sourceforge.net/packages/wget.htm
  2. জিআইটি ইনস্টল করুন http://code.google.com/p/msysgit/downloads/list ইনস্টলারটি এক্সিকিউটেবলের মাধ্যমে ইনস্টল করুন
  3. এনএসএসএম ইনস্টল করুন http://nssm.cc/download/?page=download % windir% / System32 ফোল্ডার মধ্যে nnsm.exe অনুলিপি মাধ্যমে
  4. সি: ode নোড \ হেলোরওর্ড.জেএস তৈরি করুন

    // http://howtonode.org/hello-node
    var http = require('http');
    var server = http.createServer(function (request, response) {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.end("Hello World\n");
    });
    server.listen(8000);
    console.log("Server running at http://127.0.0.1:8000/");
  5. কমান্ড কনসোল খুলুন এবং নিম্নলিখিত টাইপ করুন (রিসোর্স কিট ইনস্টল করা থাকলে কেবল সেটেক্স)

    C:\node> set path=%PATH%;%CD%
    C:\node> setx path "%PATH%"
    C:\node> set NODE_PATH="C:\Program Files\nodejs\node_modules"
    C:\node> git config --system http.sslcainfo /bin/curl-ca-bundle.crt    
    C:\node> git clone --recursive git://github.com/isaacs/npm.git    
    C:\node> cd npm    
    C:\node\npm> node cli.js install npm -gf   
    C:\node> cd ..    
    C:\node> nssm.exe install node-helloworld "C:\Program Files\nodejs\node.exe" c:\node\helloworld.js    
    C:\node> net start node-helloworld
  6. একটি নিফ্টি ব্যাচের গুডিটি সি তৈরি করতে হয়: ode নোড \ সার্ভিসমে সিএমডি

    @echo off
    nssm.exe install node-%~n1 "C:\Program Files\nodejs\node.exe" %~s1
    net start node-%~n1
    pause

সেবা ব্যবস্থাপনা:

  • পরিষেবাগুলি এখন স্টার্ট-> রান-> পরিষেবাদি.এমএসসি বা স্টার্ট-> রান-> এমএসসিএনএফজি-> পরিষেবাগুলির মাধ্যমে অ্যাক্সেসযোগ্য (এবং 'সমস্ত মাইক্রোসফ্ট পরিষেবাদি লুকান' পরীক্ষা করুন)।
  • স্ক্রিপ্টটি ব্যাচ স্ক্রিপ্টের মাধ্যমে তৈরি প্রতিটি নোডকে 'নোড-' দিয়ে উপসর্গ করবে।
  • তেমনিভাবে তাদের রেজিস্ট্রিতে পাওয়া যাবে: " এইচকেএলএম Y সিস্টেম \ কারেন্ট কন্ট্রোলসেট \ পরিষেবাদিগুলি ode নোড-এক্সএক্সএক্সএক্সএক্সএক্সএক্স "

7

গৃহীত উত্তর সম্ভবত সেরা উত্পাদন উত্তর, কিন্তু একটি দ্রুত হ্যাক জন্য দেব কাজ করে, আমি এটি খুঁজে পেয়েছি:

nodejs scriptname.js & কাজ করেনি, কারণ নোডেজগুলি মনে হয় & এলোমেলো হয়ে পড়েছিল এবং তাই জিনিসটি আমাকে স্ক্রিপ্টনাম.জেএসএস ছাড়া টার্মিনালটি ব্যবহার করতে দেয় না।

তবে আমি nodejs scriptname.jsএকটি .sh ফাইল রেখেছি এবং nohup sh startscriptname.sh &কাজ করেছি।

অবশ্যই কোনও উত্পাদনের জিনিস নয়, তবে এটি "আমার নিজের টার্মিনালটি ব্যবহার করা দরকার এবং 5 টি আলাদা টার্মিনাল শুরু করতে চাই না" সমস্যাটি সমাধান করে।


4

আপনি যদি লিনাক্স সার্ভারে নোডেজ চালাচ্ছেন তবে আমি মনে করি এটি সেরা উপায়।

একটি পরিষেবা স্ক্রিপ্ট তৈরি করুন এবং /etc/init/nodejs.conf এ অনুলিপি করুন

সূচনা পরিষেবা: সূডো পরিষেবা নোডেজগুলি শুরু হয়

পরিষেবা বন্ধ করুন: sudo পরিষেবা নোডেজ বন্ধ

সেভিস স্ক্রিপ্ট

description "DManager node.js server - Last Update: 2012-08-06"
author      "Pedro Muniz - pedro.muniz@geeklab.com.br"

env USER="nodejs" #you have to create this user 
env APPNAME="nodejs" #you can change the service name
env WORKDIR="/home/<project-home-dir>" #set your project home folder here
env COMMAND="/usr/bin/node <server name>" #app.js ?

# used to be: start on startup
# until we found some mounts weren't ready yet while booting:
start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

pre-start script
    sudo -u $USER echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/$APPNAME.log
end script

script
    # Not sure why $HOME is needed, but we found that it is:
    export HOME="<project-home-dir>"  #set your project home folder here
    export NODE_PATH="<project node_path>"

    #log file, grant permission to nodejs user
    exec start-stop-daemon --start --make-pidfile --pidfile /var/run/$APPNAME.pid --chuid $USER --chdir $WORKDIR --exec $COMMAND >> /var/log/$APPNAME.log 2>&1
end script

post-start script
   # Optionally put a script here that will notifiy you node has (re)started
   # /root/bin/hoptoad.sh "node.js has started!"
end script

pre-stop script
    sudo -u $USER echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/$APPNAME.log
end script

4

জুন 2017 আপডেট:
লিনাক্সের জন্য সমাধান: (লাল টুপি)। পূর্ববর্তী মন্তব্যগুলি আমার পক্ষে কাজ করে না। এটি আমার জন্য অ্যামাজন ওয়েব পরিষেবা - রেড হ্যাট works এ কাজ করে Hope

A. Create the service file 
sudo vi /etc/systemd/system/myapp.service
[Unit]
Description=Your app
After=network.target

[Service]
ExecStart=/home/ec2-user/meantodos/start.sh
WorkingDirectory=/home/ec2-user/meantodos/

[Install]
WantedBy=multi-user.target

B. Create a shell file
/home/ec2-root/meantodos/start.sh
#!/bin/sh -
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
npm start

then:
chmod +rx /home/ec2-root/meantodos/start.sh
(to make this file executable)

C. Execute the Following

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl status myapp

(If there are no errors, execute below.  Autorun after server restarted.)
chkconfig myapp -add

খুব মজার, আমি এটি সম্পর্কে iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080কি কৌতূহলী । আপনি আমাকে আরও বিশদ দিতে পারেন দয়া করে। আমি নিশ্চিত নই কিন্তু আমি এটা থেকে ট্রাফিক পুননির্দেশনা মনে 80করার 8080, যা নোড সার্ভার কথা শোনে ঠিক আছে?
শাকিবা মোশিরি

3

ব্যবহার nssm উইন্ডোগুলির সবচেয়ে ভালো সমাধান, শুধু ডাউনলোড nssm nssm ডিরেক্টরি ও টাইপ, cmd ওপেন করুন

nssm install <service name> <node path> <app.js path> 

eg: nssm install myservice "C:\Program Files\nodejs" "C:\myapp\app.js" 

এটি একটি নতুন উইন্ডোজ পরিষেবা ইনস্টল করবে যা সেবার থেকে পরিষেবাদিগুলিতে তালিকাভুক্ত হবে ms সেখান থেকে আপনি পরিষেবাটি শুরু করতে বা বন্ধ করতে পারেন, এই পরিষেবাটি স্বয়ংক্রিয়ভাবে শুরু হবে এবং এটি ব্যর্থ হলে পুনরায় চালু করতে কনফিগার করতে পারেন।


2

প্রস্তাবিত বিভিন্ন বিকল্পগুলি খুঁজে বের করার জন্য, এখানে আরও একটি তথ্য রয়েছে: daemonজিএনইউ / লিনাক্সের কমান্ড, যা আপনি এখানে পড়তে পারেন: http://libslack.org/daemon/manpages/daemon.1.html । (উপরের মতামতের একটিতে ইতিমধ্যে এটি উল্লেখ করা থাকলে ক্ষমা চাই)



1

কেউ কি "2> & 1" এর অবস্থান সম্পর্কে একটি তুচ্ছ ভুল লক্ষ্য করেছেন?

2>&1 >> file

হতে হবে

>> file 2>&1

1

আমি দূরবর্তী হোস্টগুলিতে একাধিক উইন্ডো / ফলক বিকাশের পরিবেশের জন্য tmux ব্যবহার করি। প্রক্রিয়াটি পৃথক করা এবং পটভূমিতে চলমান রাখা সত্যিই সহজ। কটাক্ষপাত আছে tmux


1

ডেমন এনপিএম মডিউলের নতুন সংস্করণ ব্যবহার করা লোকদের জন্য - আপনার স্ট্রিংয়ের পরিবর্তে ফাইল বর্ণনাকারী পাস করতে হবে:

var fs = require('fs');
var stdoutFd = fs.openSync('output.log', 'a');
var stderrFd = fs.openSync('errors.log', 'a');
require('daemon')({
    stdout: stdoutFd, 
    stderr: stderrFd
});

0

পিএম 2 হ'ল বিল্ট-ইন লোড ব্যালেন্সার সহ নোড.জেএস অ্যাপ্লিকেশনগুলির জন্য একটি উত্পাদন প্রক্রিয়া পরিচালক। এটি আপনাকে অ্যাপ্লিকেশনগুলিকে চিরতরে বাঁচিয়ে রাখতে, ডাউনটাইম ছাড়াই এগুলি পুনরায় লোড করতে এবং সাধারণ সিস্টেম অ্যাডমিন কার্যগুলির সুবিধার্থে সহায়তা করে। https://github.com/Unitech/pm2


গুরুতর স্মৃতি গ্রাহক সমস্যা! ফিউশন + এনজিনেক্সের জন্য যান
রিজওয়ান প্যাটেল

0

আমি অবাক হই যে গুভনোরের কথা কেউ উল্লেখ করেনি

আমি চিরকালের জন্য চেষ্টা করেছি, বেলা ২, ইত্যাদি। তবে, যখন এটি কঠিন নিয়ন্ত্রণ এবং ওয়েব ভিত্তিক পারফরম্যান্স মেট্রিকের কথা আসে, আমি গুভনরকে সবচেয়ে সেরা হিসাবে পেয়েছি । এছাড়াও, এটি সম্পূর্ণরূপে মুক্ত উত্সও।

এখানে চিত্র বর্ণনা লিখুন

সম্পাদনা: তবে, আমি জানিনা এটি উইন্ডোতে কাজ করে কিনা। আমি এটি কেবল লিনাক্সে ব্যবহার করেছি।


4
2017 হিসাবে বাসি মনে হচ্ছে Build ব্যর্থতা তৈরি করুন। গত বছর কোনও কোড পুশ করে না। সন্দেহজনক।
আজাতর

0

যেহেতু আমি সরবরাহ করা জবাবগুলির তালিকায় এই বিকল্পটি হারিয়ে ফেলছি আমি ২০২০ সালের মতো একটি যোগ্য বিকল্প যুক্ত করতে চাই: ডকার বা কোনও সমতুল্য ধারক প্ল্যাটফর্ম। আপনার অ্যাপ্লিকেশনটি একটি স্থিতিশীল পরিবেশে কাজ করছে তা নিশ্চিত করার পাশাপাশি অতিরিক্ত সুরক্ষা বেনিফিটের পাশাপাশি উন্নত বহনযোগ্যতা রয়েছে।

উইন্ডোজ, ম্যাকোস এবং সর্বাধিক / বড় লিনাক্স বিতরণগুলির জন্য ডকার সমর্থন রয়েছে। সমর্থিত প্ল্যাটফর্মে ডকার ইনস্টল করা বরং সোজা-ফরোয়ার্ড এবং ভাল-ডকুমেন্টেড। একটি নোড.জেএস অ্যাপ্লিকেশন সেটআপ করা এটি একটি পাত্রে রাখার মতো এবং সেই কনটেইনারটি চালানোর মতোই সহজ, যখন শটডাউনের পরে এটি পুনরায় চালু হচ্ছে তা নিশ্চিত করে।

ধারক ইমেজ তৈরি করুন

আপনার অ্যাপ্লিকেশনটি সেই সার্ভারে / home / me / my-app- তে উপলব্ধ বলে ধরে নিই , ফোল্ডারে / হোম / আমার / আমার-অ্যাপ্লিকেশনটিতে অনুরূপ সামগ্রী সহ একটি পাঠ্য ফাইল তৈরি করুন :

FROM node:lts-alpine
COPY /my-app /app
CMD ["/app/server.js"]

এইভাবে কমান্ড ব্যবহার করে চিত্রটি তৈরি করুন:

docker build -t myapp-as-a-service /home/me

দ্রষ্টব্য: সর্বশেষ প্যারামিটারটি ডকফাইফিলের পরিবর্তে সেই ডকফেরাইল যুক্ত ফোল্ডারটি নির্বাচন করছে। আপনি বিকল্প ব্যবহার করে একটি আলাদা বাছুন পারে -f

ধারক শুরু করুন

ধারকটি শুরু করার জন্য এই আদেশটি ব্যবহার করুন:

docker run -d --restart always -p 80:3000 myapp-as-a-service

এই কমান্ডটি ধরে নিচ্ছে যে আপনার অ্যাপ্লিকেশনটি 3000 পোর্টে শুনছে এবং আপনি এটি আপনার হোস্টের 80 পোর্টে প্রকাশ করতে চান।

এটি নিশ্চিতভাবেই খুব সীমিত উদাহরণ, তবে এটি একটি ভাল সূচনার পয়েন্ট।


0

আপনি যদি pm2 ব্যবহার করেন, আপনি এটি autorestartসেট সহ এটি ব্যবহার করতে পারেন false:

$ pm2 ইকোসিস্টেম

এটি একটি নমুনা তৈরি করবে ecosystem.config.js:

module.exports = {
  apps: [
    {
      script: './scripts/companies.js',
      autorestart: false,
    },
    {
      script: './scripts/domains.js',
      autorestart: false,
    },
    {
      script: './scripts/technologies.js',
      autorestart: false,
    },
  ],
}

$ pm2 ইকোসিস্টেম.config.js শুরু করুন


-1

এই উত্তরটি পার্টির পক্ষে বেশ দেরি করে, তবে আমি দেখতে পেলাম যে সেরা সমাধানটি শেল স্ক্রিপ্ট লিখতে হয়েছিল যা উভয় screen -dmSএবং nohupকমান্ড উভয়ই ব্যবহার করে ।

screen -dmS newScreenName nohup node myserver.js >> logfile.log

আমি >> logfileশেষে বিটটিও যুক্ত করছি যাতে আমি সহজেই নোডের console.log()বিবৃতিগুলি সংরক্ষণ করতে পারি ।

আমি কেন শেল স্ক্রিপ্ট ব্যবহার করলাম? ওয়েল আমি একটি if স্টেটমেন্টে যুক্ত করেছিলাম যা node myserver.jsপ্রক্রিয়াটি ইতিমধ্যে চলছে কিনা তা পরীক্ষা করে দেখে ।

এইভাবে আমি একটি একক কমান্ড লাইন বিকল্প তৈরি করতে সক্ষম হয়েছি যা উভয়ই আমাকে সার্ভারটি চালু রাখতে এবং পুনরায় চালু করতে দেয় যখন আমি পরিবর্তনগুলি করেছি যা উন্নয়নের জন্য খুব সহায়ক।


2
আমি এই সমস্যায় পড়েছি এবং লিনাক্সে বেশ নতুন। আপনি কীভাবে এটি পর্দা বা নোপআপ ছাড়া করবেন?
ক্রেগ নরটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.