اذهب إلى المحتوى

السؤال

نشر

لقد قمت برفع مشروع node.js على الخادم بنظام التشغيل ubuntu، وقمت بتشغيل الخادم من خلال استخدام pm2. ولكن أرغب بإضافة رابط معيّن route بحيث عندما يتم استقباله من الخادم أن يقوم بإعادة تشغيل الخادم أو إيقافه.

فهل من الممكن الوصول إلى pm2 والتحكّم بهذه الأوامر من node.js؟ أو يجب أن أتخلى عن استخدام pm2 وألجأ إلى طريقة أخرى؟

Recommended Posts

  • 0
نشر

توفر الوحدة الأساسية للعملية طريقة سهلة تتيح لك الخروج برمجيًا من برنامج Node.js وهي process.exit.

عندما يقوم Node.js بتشغيل هذا الأمر ، يتم إجبار العملية على الإنهاء على الفور.

هذا يعني أن أي رد اتصال معلق ، أو أي طلب شبكة لا يزال قيد الإرسال ، أو أي وصول إلى نظام الملفات ، أو عمليات الكتابة إلى stdout أو stderr - سيتم إنهاء كل ذلك بشكل غير لائق على الفور.
إذا كان هذا مناسبًا لك ، فيمكنك تمرير عدد صحيح يشير إلى نظام التشغيل لكود الخروج:

process.exit(1)

رمز الخروج افتراضيًا هو 0 ، مما يعني النجاح. رموز الخروج المختلفة لها معنى مختلف ، والذي قد ترغب في استخدامه في نظامك الخاص لجعل البرنامج يتواصل مع البرامج الأخرى.

في كثير من الأحيان مع Node نبدأ الخوادم ، مثل خادم HTTP هذا:

const express = require('express')
const app = express()

app.get('/', (req, res) => {
  res.send('Hi!')
})

app.listen(3000, () => console.log('Server ready'))

في هذه الحالة ، تحتاج إلى إرسال إشارة SIGTERM للأمر ، والتعامل مع ذلك باستخدام معالج إشارة العملية:

const express = require('express')

const app = express()

app.get('/', (req, res) => {
  res.send('Hi!')
})

const server = app.listen(3000, () => console.log('Server ready'))

process.on('SIGTERM', () => {
  server.close(() => {
    console.log('Process terminated')
  })
})

SIGKILL هي الإشارات التي تخبر العملية بالإنهاء فورًا ، وتتصرف بشكل مماثل مثل process.exit ().

يمكنك إرسال هذه الإشارة من داخل البرنامج ، في وظيفة أخرى:

process.kill(process.pid, 'SIGTERM')

 

  • 0
نشر

يمكن التحكّم بالخادم من خلال ما يقدّمه node.js من مكاتب بشكل افتراضي دون الحاجة لتحميلها وهي process و child_process. حيث تستطيع إعادة التشغيل عند وصول حدث معيّن كالتالي:

var process = require('process');
var cp = require('child_process');

var server = cp.fork('server.js');
console.log('Server started');


//عند وصول حدث معيّن
server.kill();
server = cp.fork('server.js');

حيث من المهم إنشاء نسخة عند تشغيل الخادم من خلال cp.fork، وإلا لن نستطيع إعادة تشغيل الخادم بعد إيقافه.

أما فيما يتعلّق ب pm2 فهذه الأوامر تتعامل بشكل مباشر مع الخادم (أي ملف server.js) وليس لها أي علاقة بمدير الحزم لذلك يجب عليك الأخذ بعين الاعتبار إما إيقاف وتشغيل الخادم من هنا أو من خلال ما يتحكّم به pm2

  • 0
نشر

إذا كنت تقصد إعادة تشغيل للخادم بالكامل reboot فيمكنك إستخدام الكود التالي

// يمكنك إستدعاء هذه الدالة
function reboot(){
  require('child_process').exec('shutdown -r now', function (msg) { console.log(msg) });
}

اما إذا كنت تريد إعادة تشغيل خادم node فيمكنك إستخدام هذا الكود

/*
إذا كنت تستخدم
express
إستبدل 
restart 
بالمسار الذي تريد
*/

app.get('/restart', (req, res)=> {
  /* 
  استبدل
  app_name
  بإسم خادم 
  node
  */

  require('child_process').exec('pm2 restart app_name', function (msg) { console.log(msg) });
})

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...