مقدمة
في مجال الحوسبة، لا تسير الأمور دائمًا كما هو مخطط لها. ففي كثير من الأحيان، تؤدي أعطال النظام غير المتوقعة إلى دفع مسؤولي النظام إلى بدء عمليات إعادة التشغيل وإعادة تشغيل الخدمات الفردية. قد يكون اكتشاف وإعادة تشغيل كل خدمة يحتاجها تطبيقك للتشغيل بعد تعطل النظام أو إعادة تشغيله أمرًا مملًا. في هذا الجزء الأول من البرنامج التعليمي المكون من جزأين، سنوضح لك كيفية تكوين الخدمات لتبدأ تلقائيًا بعد تعطل النظام أو إعادة تشغيل الخادم مع أمثلة عملية. الـ الجزء الثاني سيغطي معلومات نظرية حول ما حققناه في الجزء الأول.
سنستخدم خدمة قاعدة بيانات MySQL للأمثلة العملية. ومع ذلك، تنطبق نفس المبادئ على العمليات الأخرى التي تشكل خادمًا كاملاً مثل Nginx, Apache, Redis، أو غيرها من التطبيقات. يمكنك الاطلاع على البرامج التعليمية الخاصة بنا حول كيفية تثبيت MySQL, Nginx، و Apache.
في توزيعات Linux، هناك ثلاثة أنظمة تهيئة (init) رئيسية، اعتمادًا على التوزيعة التي تقوم بتشغيلها. قد تأتي بعض التوزيعات بنظامي تهيئة أو أكثر كما هو موضح أدناه:
- System V – نظام تهيئة أقدم يوجد في التوزيعات القديمة مثل:
- Ubuntu 9.04 والإصدارات الأقدم
- CentOS 5 والإصدارات الأقدم
- Debian 6 والإصدارات الأقدم
- Upstart – مستخدم في التوزيعات السابقة مثل:
- CentOS 6
- Ubuntu 9.10 إلى Ubuntu 14.10 و Ubuntu 14.04
- Systemd – مستخدم في أحدث التوزيعات مثل:
- CentOS 7
- Debian 7 و 8.
- Ubuntu 15.04 والإصدارات الأحدث
خلفية
من الشائع أن تحتوي أنظمة التشغيل، وخاصة أنظمة Linux و Unix على عمليات وخدمات تعمل في الخلفية. قد تكون هذه الخدمات قد تم شحنها مع برنامج نظام التشغيل. وقد يأتي بعضها مع تطبيقات المستخدم التي تقوم بتثبيتها.
تشمل خدمات نظام التشغيل ما يلي:
- sshd – هو البرنامج الخفي (daemon) الذي يسمح بالاتصالات عن بعد.
- cupsd – هو البرنامج الخفي الذي يتحكم في الطباعة.
تشمل خدمات التطبيقات المثبتة ما يلي:
- httpd/apache2 – خدمة تأتي مع خادم ويب Apache2.
- nginx – خدمة تأتي مع خادم ويب Nginx.
لضمان إمكانية الوصول إلى تطبيقات الويب وقواعد البيانات وخوادم البريد الإلكتروني وما إلى ذلك، يجب أن تعمل هذه الخدمات بشكل مستمر. إذا كنت مسؤول نظام أو مطور تطبيقات فضوليًا، فأنت تريد التأكد من تشغيل هذه الخدمات باستمرار، وفي حالة حدوث عطل غير متوقع في النظام، فإنها تبدأ تلقائيًا بعد إعادة تشغيل النظام. وهذا هو بالضبط ما سنتعلمه في هذا البرنامج التعليمي العملي.
في حين أن تعيين التنبيهات والمراقبة المستمرة لتوزيعة Linux الخاصة بك أمر بالغ الأهمية، فإن بعض خدمات Linux يمكنها إصلاح نفسها ذاتيًا إذا تم تكوينها بشكل جيد، وذلك بفضل أنظمة التهيئة (init) التي تدير الخدمات.
في توزيعات Linux، هناك أوضاع تشغيل تنفذ تهيئة النظام تسمى runlevels. لكي تبدأ الخدمة تلقائيًا، يجب إضافتها إلى مستوى تشغيل. يحتوي كل نظام شبيه بـ Linux و Unix على أربعة مستويات تشغيل مشتركة كما هو موضح أدناه:
- 0 – يشير مستوى التشغيل 0 إلى إيقاف تشغيل النظام.
- 1 – يشير مستوى التشغيل 1 إلى وضع المستخدم الواحد، وضع الإنقاذ.
- 2, 3, 4 – تشير مستويات التشغيل هذه إلى الحالات التي تم فيها تشغيل النظام في وضع النص متعدد المستخدمين والممكّن للشبكة.
- 5 – يشير مستوى التشغيل 5 إلى الوضع الرسومي متعدد المستخدمين والممكّن للشبكة.
- 6 – يشير مستوى التشغيل 6 إلى إعادة تشغيل النظام.
في هذا البرنامج التعليمي، ستتعلم كيفية تكوين خدمة Linux لتبدأ تلقائيًا عند إعادة تشغيل النظام باستخدام أوضاع التهيئة الثلاثة المختلفة الموضحة سابقًا: System V و Upstart و Systemd.
المتطلبات الأساسية
يتطلب هذا البرنامج التعليمي العملي أن يكون لديك خادم افتراضي خاص (VPS) يعمل بنظام Linux لتتمكن من المتابعة. يمكنك الاستفادة من الفترة التجريبية المجانية في Cloudsigma وتشغيل بعض الخوادم لتجربة الأوامر. يمكنك المتابعة مع برنامجنا التعليمي خطوة بخطوة حول كيفية إعداد خوادم Ubuntu الخاصة بك.
الخوادم التي تقوم بإنشائها في هذا البرنامج التعليمي هي فقط لمتابعة التطبيقات العملية، ولا ينبغي عليك تجربة الأوامر على خادم إنتاج نظرًا لأن الكثير من الخدمات ستتعطل.
بعض التوزيعات التي ستحتاجها:
- Ubuntu 9.04 والإصدارات الأقدم، أو Debian 6 x64 (سيتم استخدامها لتوضيح نظام التهيئة System V)
- Ubuntu 14.04 x64 (سيتم استخدامها لتوضيح Upstart)
- CentOS 7 x64 (سيتم استخدامه لتوضيح systemd).
تأكد من إعداد مستخدم غير جذري يتمتع بامتيازات sudo. يمكنك إلقاء نظرة على البرنامج التعليمي الخاص بنا حول تكوين ملف sudoers هنا.
استخدام System V
هذا هو أقدم نظام init تم استخدامه في توزيعات Linux السابقة مثل:
- Debian 6 والإصدارات الأقدم
- CentOS 5 والإصدارات الأقدم
- Ubuntu 9.04 والإصدارات الأقدم
تأتي معظم تطبيقات الخادم القابلة للتثبيت مثل MySQL و Nginx مع نصوص init البرمجية المحفوظة في /etc/init.d بشكل افتراضي. تمكنهم هذه النصوص البرمجية من البدء بعد إعادة التشغيل. ومع ذلك، قد لا يتم تكوينها لتبدأ تلقائيًا بعد تعطل النظام.
قائمة التحقق من التشغيل التلقائي لـ System V
الخطوة الأولى هي التحقق من توفر نص Bash init برمي وظيفي في دليل /etc/init.d/service. لتمكين الخدمة، في Debian أو توزيعات Ubuntu، استخدم الأمر update-rc.d، وفي نظام CentOS، استخدم chkconfig. استبدله باسم الخدمة الفعلي لديك:
|
1 |
sudo update-rc.d service enable |
يقوم الأمر أعلاه بإنشاء رابط رمزي في دليل /etc/rc2.d يبدو مثل المخرجات أدناه. لا تقم بإنشائه بنفسك لأنه يتم إنشاؤه تلقائيًا:
|
1 |
lrwxrwxrwx 1 root root 20 Dec 10 07:09 S02mysql -> ../init.d/service |
في الجزء السفلي من الملف /etc/inittab أضف سطر respawn كما هو موضح في المثال العام أدناه. تذكر استبداله بالمسار الفعلي لبرنامج بدء تشغيل تطبيقك:
|
1 |
id:2345:respawn:/bin/sh /path/to/your-application/startup |
أدخل الأوامر التالية لإيقاف الخدمة وبدء تشغيلها:
|
1 2 |
sudo service service-name stop sudo service service-name start |
بعد ذلك، أعد تشغيل الخادم:
|
1 |
sudo reboot |
كيفية اختبار التغييرات؟
بعد إعادة تشغيل الخادم، تحقق من أن الخدمة تعمل من خلال البحث عن رقم العملية باستخدام الأمر:
|
1 |
ps -ef | grep service-name |
قم بإنهاء العملية باستخدام الأمر:
|
1 |
sudo kill -9 process_number |
بعد خمس دقائق، تحقق من أن الخدمة تعمل وتشتغل.
تكوين عملي لـ System V مع خدمة حقيقية
في الخطوات التالية، سنقوم بتجربة تطبيق خادم حقيقي مثل MySQL. يجب أن يكون لديك حق الوصول إلى جهاز افتراضي يعمل بنظام Debian 6. باستخدام حساب يتمتع بامتيازات sudo، اتصل به باستخدام SSH أو putty إذا كنت تستخدم سطح مكتب يعمل بنظام Windows.
الخطوة 1: تثبيت MySQL
أدخل الأمر التالي لتثبيت MySQL:
|
1 |
sudo apt-get install mysql-server -y |
عند بدء التثبيت، سيُطلب منك إدخال كلمة مرور root. بعد ذلك، أدخل كلمة مرور من اختيارك وقم بتأكيدها. انتظر حتى يكتمل التثبيت، ثم أدخل الأمر التالي لبدء تأمين MySQL:
|
1 |
mysql_secure_installation |
سيُطلب منك إدخال كلمة مرور root التي أدخلتها سابقًا. اضغط على N للاحتفاظ بها. بعد ذلك، اضغط على Y لقبول المطالبات التالية لإزالة المستخدمين المجهولين، وتعطيل تسجيل دخول root عن بُعد، وإزالة قاعدة بيانات الاختبار. أخيرًا، وافق على إعادة تحميل جدول الامتيازات لتنعكس التغييرات تلقائيًا.
بهذا يكتمل تثبيت MySQL. يمكنك التحقق مما إذا كانت الخدمة تعمل عن طريق إدخال الأمر التالي:
|
1 |
service mysql status |
الخطوة 2: تكوين MySQL للتشغيل التلقائي بعد إعادة التشغيل
تم تكوين MySQL افتراضيًا ليبدأ بعد إعادة تشغيل النظام. يمكنك العثور على الرابط الرمزي لنص تهيئة MySQL البرمجي في دليل /etc/rc2.d. لا يتم إنشاء هذه الروابط الرمزية يدويًا. يمكنك استخدام الأمر update-rc.d لتمكين الخدمات وتعطيلها.
أدخل الأمر التالي لسرد محتويات الدليل:
|
1 |
ls -l /etc/rc2.d |
تحقق مما إذا كان بإمكانك ملاحظة الرابط الرمزي لنص MySQL init البرمجي:
|
1 |
lrwxrwxrwx 1 root root 15 Dec 2 10:42 S01mysql -> ../init.d/mysql |
الحرف S مهم، لأنه طالما يمكنك رؤية S البرمجية النصية (script) الموجودة تحت دليل مستوى التشغيل الافتراضي للخدمة، سيقوم نظام init ببدء الخدمة عند إقلاع الخادم. للتحقق من أن MySQL ستبدأ تلقائيًا بعد إعادة التشغيل، أدخل الأمر التالي لإعادة تشغيل النظام:
|
1 |
sudo reboot |
سينقطع اتصال ssh الخاص بك أثناء إعادة التشغيل. انتظر دقيقة أو دقيقتين ثم اتصل مجددًا. قم بتشغيل الأمر التالي للتحقق مما إذا كانت الخدمة تعمل:
|
1 |
service mysql status |
ستشير المخرجات إلى أن الخدمة تعمل. هذا يعني أنها بدأت تلقائيًا بعد إعادة التشغيل. بالنسبة للخدمات غير المكونة للبدء تلقائيًا، سيتعين عليك تكوينها بنفسك.
يمكننا تعطيل خدمة MySQL وإعادة تشغيل النظام لاختبار ما إذا كانت ستبدأ تلقائيًا. في أنظمة Debian و Ubuntu، يمكنك استخدام update-rc.d لإضافة خدمات أو إزالتها من نظام init. أدخل الأمر التالي لتعطيل خدمة MySQL:
|
1 |
sudo update-rc.d mysql disable |
أعد تشغيل النظام واتصل مجددًا باستخدام ssh. حاول الاتصال بـ MySQL باستخدام الأمر التالي:
|
1 |
mysql -u root -p |
ستتلقى خطأ MySQL مثل:
|
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server |
بعد ذلك، أدخل الأمر التالي لإعادة تمكين الخدمة:
|
1 |
sudo update-rc.d mysql enable |
إذا كنت تستخدم توزيعة CentOS، فسيكون الأمر:
|
1 |
sudo chkconfig mysql enable |
بما أن MySQL لم تكن تبدأ في البداية، فيجب عليك تشغيلها. أدخل الأمر التالي:
|
1 |
sudo service mysql start |
الخطوة 3: تكوين خدمة (MySQL) للبدء التلقائي بعد تعطل النظام
لن يقوم System V ببدء تشغيل العملية تلقائيًا بعد التعطل. يمكننا محاكاة تعطل النظام من خلال العثور على معرف عملية MySQL وإنهائها. أدخل الأمر التالي للعثور على معرف عملية MySQL:
|
1 |
ps -ef | grep mysql |
من المخرجات، ابحث عن عمليات MySQL. العمليات الرئيسية التي تشغل MySQL هي mysqld_safe و mysqld. لاحظ معرفات العمليات الخاصة بها (وهي عبارة عن أرقام) واستخدم الأوامر التالية لإنهائها:
|
1 2 |
sudo kill -9 mysqldsafe_number sudo kill -9 mysqld_number |
تحقق من حالة خدمة MySQL باستخدام الأمر:
|
1 |
sudo service mysql status |
ستشير المخرجات إلى أن MySQL قد توقفت. يمكننا إعادة تشغيلها يدويًا باستخدام أمر بدء الخدمة. ومع ذلك، نريد عملية تلقائية. لتحقيق هذا السلوك التلقائي، نحتاج إلى تعديل ملف /etc/inittab. هذا هو الملف الأول الذي يقرأه System V init عند الإقلاع. يحتوي ملف /etc/inittab على تعليمات حول كيفية تصرف العملية في حال تعطلها. إذا تم تكوينه بشكل صحيح، فإنه يعيد تشغيل النظام مرة أخرى عند حدوث تعطل. بالنسبة لحالتنا، نريد التأكد من أن MySQL هي إحدى هذه الخدمات.
إن ملف /etc/inittab مهم للغاية لتوزيعة Linux. فهو يحدد ما إذا كان نظامك سيعيد التشغيل أم لا. إذا ارتكبت خطأً في الأوامر، فقد لا يبدأ النظام عند إعادة التشغيل. كما أشرنا سابقًا، نأمل أنك تقوم بتجربة هذه الأوامر في بيئة خادم اختبار فقط وليس في بيئة إنتاجية.
أولاً، قم بعمل نسخة من الملف قبل البدء في التعديل:
|
1 |
sudo cp /etc/inittab /etc/inittab.original |
بعد ذلك، افتح الملف باستخدام nano:
|
1 |
sudo nano /etc/inittab |
انتقل إلى نهاية الملف وأضف مقتطف الكود التالي:
|
1 |
ms:2345:respawn:/bin/sh /usr/bin/mysqld_safe |
يقوم الأمر أعلاه بإعادة تشغيل عملية mysql_safe بعد تعطل النظام. ويحتوي على أربعة حقول مفصولة بنقطتين رأسيتين كما هو موضح أدناه:
- ms: يحدد معرفًا للعملية.
- 2345: يحدد مستويات التشغيل (runlevels) التي ينطبق عليها الأمر. في هذه الحالة: مستويات التشغيل 2، 3، 4، 5.
- respawn: يحدد الإجراء. في هذه الحالة، نقوم بإعادة توليد (respawning) أو إعادة تشغيل العملية.
- /bin/sh /usr/bin/mysqld_safe: يحدد الجزء الأخير العملية - الأمر الذي يتم تنفيذه لإعادة تشغيل العملية.
الآن اضغط على Ctrl + O ثم Enter لحفظ الملف. بعد ذلك، اضغط على Ctrl + X لإغلاق المحرر. أدخل الأمر التالي لبدء الخدمة:
|
1 |
sudo service mysql start |
أعد تشغيل الخادم، ثم قم بتشغيل الأوامر الموضحة سابقًا للعثور على رقم العملية. بعد ذلك، قم بإنهاء العمليات، بدءًا من الأمر ps -ef | grep mysql. انتظر لبضع دقائق وأدخل الأمر التالي للتحقق من حالة MySQL:
|
1 |
sudo service mysql status |
يجب أن تشير المخرجات إلى أن خدمة MySQL قيد التشغيل والعمل، مما يعني أنها كانت قادرة على إعادة التشغيل بعد الانهيار. يمكنك اتباع نفس العملية للخدمات الأخرى على خادمك.
بدء تشغيل الخدمات تلقائيًا باستخدام Upstart
Upstart هو نظام تهيئة (init) آخر تم تقديمه في البداية في Ubuntu 6 وأصبح لاحقًا النظام الافتراضي في Ubuntu 9.10. كما تستخدم توزيعة RHEL 6 ومشتقاتها ونظام التشغيل Chrome OS من Google نظام التهيئة Upstart أيضًا. بالنسبة للخطوات الواردة في هذا القسم، يجب أن يكون لديك خادم يقوم بتشغيل أي من التوزيعات التالية:
- Ubuntu 9.10 إلى Ubuntu 14.10، وإصدار الدعم طويل الأمد (LTS) من Ubuntu، أي Ubuntu 14.04.
- CentOS 6
دعنا نرى كيف يمكنك تكوين ملفات Upstart لبدء تشغيل خدمات الخادم تلقائيًا في حالة إعادة التشغيل أو انهيار النظام. يستخدم Upstart ملفات تكوين مخزنة تحت دليل /etc/init للتحكم في الخدمات في توزيعة Linux. تقوم معظم الإصدارات الحديثة من تطبيقات الخادم مثل MySQL و Nginx بتثبيت البرامج النصية للتهيئة الخاصة بها في دليل /etc/init وبالتالي، ستعمل بعد إعادة التشغيل وبعد انهيار النظام دون أن تضطر إلى القيام بأي شيء.
قائمة التحقق من بدء التشغيل التلقائي لـ Upstart
فيما يلي بعض التكوينات المرجعية للتحقق منها للتأكد من تكوين خدمتك للبدء تلقائيًا.
- تأكد من أن الخدمة تحتوي على برنامج نصي للتهيئة في الدليل /etc/init/service_name.conf – service_name حيث يمثل الاسم الفعلي لخدمتك المحددة. يجب عليك التحقق من وجود السطرين التاليين في ملف /etc/init/service_name.conf :
- سطر يحتوي على شيء مثل start on runlevel [2345]. يشير هذا إلى أنه سيتم بدء تشغيل الخدمة عند إعادة تشغيل النظام.
- سطر يحتوي على شيء مثل respawn. يشير هذا إلى أنه سيتم إعادة توليد/إعادة تشغيل الخدمة بعد انهيار النظام.
- تأكد من عدم وجود ملف تجاوز الخدمة (override) في الدليل: /etc/init/service_name.override. ما لم تكن أنت أو مسؤول نظام آخر قد أنشأه سابقًا.
- أدخل الأوامر التالية لإيقاف وبدء الخدمة:
|
1 2 |
sudo initctl stop service_name sudo initctl start service_name |
- أعد تشغيل النظام، وأعد الاتصال بعد بضع دقائق. الآن، قم بإجراء بعض الاختبارات لمعرفة ما إذا كانت الأمور تعمل
- بعد إعادة التشغيل، تحقق من أن الخدمة قيد التشغيل والعمل. أدخل الأمر التالي للبحث عن رقم العملية، واستبدل service_name بالاسم الفعلي للخدمة التي تختبرها:
|
1 |
ps -ef | grep service_name |
- بمجرد حصولك على رقم العملية، أدخل الأمر التالي لإنهاء العملية:
|
1 |
sudo kill -9 process_number |
- انتظر لبضع ثوانٍ، وتحقق مرة أخرى من أن العملية قيد التشغيل والعمل.
تكوين Upstart العملي مع خدمة حقيقية
في القسم التالي، سنحاول توضيح كيفية استخدام Upstart مع خدمة فعلية. سنقوم بإجراء الاختبارات على خادم جهاز افتراضي يعمل بنظام Ubuntu 14.04 مع استخدام MySQL كخدمة. اتصل بخادم اختبار Ubuntu 14.04 الخاص بك باستخدام ssh أو putty إذا كنت تستخدم نظام التشغيل Windows. كالعادة، يجب أن تستخدم مستخدمًا غير جذري (non-root) يتمتع بامتيازات sudo. بمجرد تسجيل الدخول، يمكننا بدء الخطوات:
الخطوة 1: تثبيت MySQL
تذكر دائمًا تحديث الحزم الخاصة بك قبل تثبيت أي برنامج جديد:
|
1 |
sudo apt-get update |
الآن، أدخل الأمر التالي لتثبيت خادم MySQL:
|
1 |
sudo apt-get install mysql-server –y |
قم بإنشاء كلمة مرور للمستخدم root عند مطالبتك بذلك. انتظر حتى يكتمل التثبيت وقم بتشغيل الأمر التالي لبدء تأمين تثبيت MySQL الخاص بك:
|
1 |
mysql_secure_installation |
اتبع المطالبات، كما فعلت في القسم السابق. ثم، قم بتفريغ الامتيازات لتصبح التغييرات سارية المفعول على الفور.
الخطوة 2: تكوين خدمة (MySQL) للبدء التلقائي بعد إعادة تشغيل النظام
تم ضبط MySQL للبدء تلقائيًا بعد إعادة التشغيل. نحن ننظر فقط في ملفات التكوين الخاصة بها لمعرفة كيف يمكننا تكوين تطبيقاتنا المخصصة لتبدأ تلقائيًا أيضًا بعد إعادة التشغيل. تم بدء خدمة MySQL تلقائيًا بعد التثبيت. ومع ذلك، دعنا نتأكد من أنها تعمل عن طريق إدخال الأمر التالي:
|
1 |
sudo initctl status mysql |
يجب أن ترى مخرجات تشير إلى أن خدمة MySQL تعمل، شيء مثل:
|
1 |
mysql start/running, process 2553 |
أعد تشغيل الخادم الخاص بك وسجل الدخول مرة أخرى. مجددًا، أدخل الأمر التالي لاختبار أنها تعمل:
|
1 |
sudo initctl status mysql |
ستشير المخرجات إلى أن MySQL قيد التشغيل، مما يعني أنه تم تشغيله تلقائيًا بعد إعادة التشغيل. في هذه الحالة، لا يلزم تغيير أي شيء. ومع ذلك، قد لا يكون هذا السلوك هو نفسه بالنسبة للتطبيقات الأخرى. قد تتساءل كيف يعرف نظام بدء التشغيل Upstart أنه يجب عليه تشغيل MySQL تلقائيًا بعد إعادة التشغيل. يقوم MySQL بتثبيت ملف تكوين بدء التشغيل الخاص بـ Upstart في الموقع /etc/init/mysql.conf. ملفات Upstart ليست نصوص shell البرمجية، بل هي ملفات نصية تحتوي على كتل برمجية لأحداث ما قبل البدء (pre-start) وما بعد البدء (post-start). توجه هذه الكتل نظام Upstart بشأن ما يجب تنفيذه عندما تبدأ عملية MySQLd أو عندما تكون قد بدأت بالفعل.
أدخل الأمر التالي لفتح الملف في المحرر باستخدام nano:
|
1 |
sudo nano /etc/init/mysql.conf |
قد تبدو مخرجات الملف كالتالي:
|
1 2 3 4 5 6 7 8 |
description "MySQL Server" author "Mario Limonciello <superm1@ubuntu.com>" start on runlevel [2345] stop on starting rc RUNLEVEL=[016] respawn respawn limit 2 5 |
كما هو موضح، توجه كتلة start برنامج MySQL للبدء في مستويات التشغيل 2، 3، 4، 5، وليس 0، 1، 6. إذا كنت تقوم بتحديد تكوين Upstart لتطبيقك، فستقوم بتحديده في هذا القسم. توجه كتلة respawn نظام Upstart بشأن ما يجب فعله بعد حدوث عطل. سنناقش ذلك في القسم التالي، لذا أبقِ الملف مفتوحًا في محرر nano.
الخطوة 3: تكوين خدمة (MySQL) للبدء التلقائي بعد التعطل
إن توجيه respawn في ملف /etc/init/mysql.conf يوجه Upstart لإعادة تشغيل خدمة MySQL بعد حدوث عطل.
يوجه التوجيه respawn limit نظام Upstart بشأن عدد المرات التي يجب أن يحاول فيها إعادة تشغيل خدمة MySQL المعطلة في فترة زمنية محددة بالثواني. تشير المعلمة الأولى، (2) إلى عدد المحاولات. وتشير المعلمة الثانية، (5) إلى الفترة الزمنية بالثواني. إذا فشل Upstart بعد حدوث عطل في إعادة تشغيل خدمة MySQL ضمن الحد المسموح به، فستظل متوقفة. تم تصميم هذا السلوك لحماية النظام من التأثير على استقراره في حالة استمراره في محاولة إعادة تشغيل الخدمات التي تتعطل باستمرار. يمكنك الآن إغلاق المحرر دون إجراء أي تغييرات.
دعنا نختبر ما إذا كان MySQL سيعود للعمل تلقائيًا بعد حدوث عطل. أدخل الأمر التالي للتحقق من الحالة والحصول على رقم العملية لخدمة MySQL:
|
1 |
sudo initctl status mysql |
يجب أن تكون المخرجات شيئًا كهذا. دون رقم العملية لأننا سنستخدمه لاحقًا:
|
1 |
mysql start/running, process 738 |
بعد ذلك، أدخل الأمر التالي لإنهاء العملية. هذا يحاكي حدوث عطل. استبدله برقم العملية الذي حصلت عليه في الأمر السابق:
|
1 |
sudo kill -9 7738 |
تحقق مجددًا من حالة MySQL عن طريق إدخال الأمر التالي:
|
1 |
sudo initctl status mysql |
يجب أن يعمل مجددًا، ولكن ربما برقم عملية مختلف:
|
1 |
mysql start/running, process 1428 |
يحدث هذا بسبب توجيه respawn في /etc/init/mysql.conf ملف. وهو يضمن أنه في حالة حدوث أي عطل في النظام، سيبدأ MySQL تلقائيًا. وبالتالي، سيستمر تطبيقك الذي يعتمد على قاعدة بيانات MySQL في العمل كما هو متوقع.
بدء تشغيل الخدمات تلقائيًا باستخدام Systemd
Systemd هو نظام تهيئة موجود في معظم توزيعات Linux الحديثة. ومن المحتمل أن يكون هو ما ستستخدمه عندما تقوم بـ إنشاء خادم VPS جديد. تم تقديمه لأول مرة في Fedora. يأتي مع RHEL 7 ومشتقاته مثل CentOS 7. بدءًا من Ubuntu 15.04، ستجد Systemd بشكل أصلي. يتوافق Systemd بشكل تراجعي مع البرامج النصية والأوامر الخاصة بتهيئة System V. وبالتالي، يجب أن تعمل أي خدمة System V تحت Systemd. تم تعديل معظم الأوامر المستخدمة في System V و Upstart للعمل مع Systemd.
مع Systemd، ستبدأ معظم تطبيقات الخادم مثل MySQL و Nginx تلقائيًا بعد إعادة التشغيل أو إيقاف التشغيل، دون الحاجة إلى تغيير أي شيء. بالنسبة لتطبيقاتك المخصصة، يجب عليك إنشاء برامج التهيئة النصية الخاصة بك لإعادة تشغيل الخدمات تلقائيًا.
لمزيد من المعلومات التفصيلية حول Systemd، راجع الدرس التعليمي الخاص بنا حول كيفية إدارة خدمات ووحدات Systemd باستخدام Systemctl.
قائمة التحقق من بدء التشغيل التلقائي لـ Systemd
إليك بعض التكوينات المرجعية للتحقق منها للتأكد من تكوين خدمتك للبدء تلقائيًا مع Systemd.
- يجب أن تحتوي الخدمة على برنامج تهيئة نصي فعال لـ Systemd موجود في /etc/systemd/system/multi-user.target.wants/serviceName.service. ServiceName هو الاسم الفعلي للخدمة التي تقوم بتكوينها.
- الأمر الخاص بتمكين الخدمة هو:
|
1 |
sudo systemctl enable serviceName.service |
- يقوم الأمر بإنشاء رابط رمزي (symlink) في دليل /etc/systemd/system/multi-user.target.wants/ والذي قد يبدو مشابهًا لـ:
|
1 |
lrwxrwxrwx 1 root root 11 Dec 1 04:43 /etc/systemd/system/multi-user.target.wants/serviceName.service -> /usr/lib/systemd/system/serviceName.service |
- مع وجود هذا الرابط الرمزي، ستكون قد قمت بتمكين إعادة التشغيل التلقائي بعد بدء التشغيل.
- لتنشيط التغييرات، أعد تحميل البرنامج الخفي للنظام (daemon) ثم أعد تحميل الخدمة باستخدام الأوامر التالية:
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl restart serviceName.service |
- لاختبار ما إذا كانت تكويناتك ستبدأ الخدمة بعد إعادة التشغيل، يمكنك إعادة تشغيل النظام:
|
1 |
sudo reboot |
- عند إعادة تشغيل النظام، ابحث عن رقم العملية باستخدام الأمر:
|
1 |
ps -ef | grep serviceName |
- لاحظ رقم العملية وقم بإنهائها باستخدام الأمر:
|
1 |
sudo kill -9 process_number |
- انتظر لبضع ثوانٍ وابحث عن الخدمة مرة أخرى للتحقق من أنها تعمل مجددًا.
تكوين عملي لـ Systemd مع خدمة حقيقية
في هذا القسم، سنحاول تكوين خدمة MySQL على جهاز افتراضي يعمل بنظام Ubuntu 20.04.
الخطوة 1: الاتصال بخادمك الافتراضي الخاص (Ubuntu 20.04 أو CentOS 7 x64)
قم بتسجيل الدخول إلى VPS الخاص بك أو قم بإنشاء واحد من the Cloudsigma panel واتصل باستخدام ssh أو putty إذا كنت تستخدم نظام التشغيل Windows. نحن نستخدم خادم Ubuntu 20.04 لهذا القسم من الدرس التعليمي. يمكن تطبيق نفس الأوامر على CentOS 7. تأكد من استخدام مستخدم غير جذري (non-root) يتمتع بامتيازات sudo.
الخطوة 2: تثبيت MySQL (الخدمة التي نقوم بتكوينها)
أولاً، قم بتحديث نظامك:
|
1 |
sudo apt update |
بعد ذلك، يمكنك تثبيت خادم MySQL باستخدام الأمر:
|
1 |
sudo apt install mysql-server –y |
بعد ذلك، قم بتشغيل الأمر التالي لبدء تأمين MySQL:
|
1 |
sudo mysql_secure_installation |
يسألك البرنامج النصي عما إذا كنت ترغب في إعداد مكون VALIDATE PASSWORD أو الضغط على أي حرف للمتابعة دون تمكين المكون. اتبع هذا الرابط لمعرفة المزيد حول MySQL validate password component.
اضغط على 1 لتمكينه ثم اختر المستوى المتوسط بالضغط على 1. أدخل كلمة مرور قوية: مزيج من الأحرف الكبيرة، والأحرف الصغيرة، والرموز الخاصة، والأرقام. أكد كلمة المرور وأكد المطالبة التي تسألك عما إذا كنت ترغب في استخدام كلمة المرور التي أدخلتها ككلمة مرور للمستخدم الجذر (root). بالنسبة لبقية المطالبات الأخرى، اضغط على y لقبولها كما فعلت في الأقسام السابقة. أخيرًا، قم بتحديث الامتيازات (flush privileges) لـ MySQL لإعادة تحميل التغييرات.
الخطوة 3: تكوين MySQL للبدء التلقائي بعد إعادة التشغيل
تم تكوين MySQL لتبدأ بعد إعادة التشغيل، لذا لا يوجد تغيير يتعين عليك إجراؤه. ومع ذلك، يمكننا استخدام ملفات تكوين MySQL لمعرفة كيفية تكوين ملفاتنا المخصصة.
أولاً، تحقق مما إذا كانت خدمة MySQL قد تم تكوينها لتبدأ عند وقت الإقلاع. أدخل الأمر التالي (لاحظ أنه في نظام Centos تسمى خدمة MySQL باسم mysqld):
|
1 |
sudo systemctl is-enabled mysql.service |
إليك المخرجات:

بعد ذلك، أعد تشغيل الخادم الافتراضي الخاص (VPS) بإدخال الأمر التالي:
|
1 |
sudo reboot |
اتصل مجددًا باستخدام ssh وأدخل الأمر التالي للتحقق من حالة خدمة MySQL:
|
1 |
sudo systemctl status mysql.service |
يجب أن تحصل على مخرجات مشابهة لتلك الموجودة في لقطة الشاشة أدناه:

لتعطيل خدمة MySQL، أدخل الأمر التالي:
|
1 |
sudo systemctl disable mysql.service |
تشير المخرجات إلى أنه قد تم إزالة الروابط الرمزية (symlinks) لخدمة MySQL من Systemd:

يمكنك اختبار ما إذا كانت الخدمة مُمكّنة مع نظام تهيئة Systemd عن طريق إدخال الأمر التالي:
|
1 |
sudo systemctl is-enabled mysql.service |
ستظهر المخرجات أنها معطلة. إذا قمت بإعادة تشغيل نظامك، فلن تبدأ MySQL عند وقت الإقلاع:
![]()
قم بتمكين الخدمة عن طريق إدخال الأمر التالي:
|
1 |
sudo systemctl enable mysql.service |
تظهر المخرجات الرابط الرمزي لخدمة MySQL الذي تم إنشاؤه في تهيئة Systemd:

عند إعادة التشغيل، ستبدأ خدمة MySQL تلقائيًا.
الخطوة 4: تكوين MySQL للبدء التلقائي بعد الانهيار
تم تكوين MySQL لإعادة التشغيل تلقائيًا بعد الانهيار. دعنا نلقي نظرة على كيفية تنفيذ هذا التكوين في Systemd. يستخدم Systemd ملفات الوحدات (unit files) للتكوين. أدخل الأمر التالي لفتح ملف تكوين mysql.service في nano:
|
1 |
sudo nano /etc/systemd/system/multi-user.target.wants/mysql.service |
تبدو المخرجات كالتالي:

ما يهمنا هو توجيه Restart. كما هو محدد، ستعيد MySQL التشغيل في حالة حدوث فشل. يحدد توجيه Restart ما يجب أن يحدث في Systemd تمامًا مثل توجيه Respawn في Upstart.
لن تحتوي جميع الخدمات على هذا التوجيه. لتمكين خدمة من إعادة التشغيل بعد الانهيار، يمكنك دائمًا إضافة توجيه Restart تحت كتلة [Service] لملف وحدة تكوين الخدمة. إذا كان رأس [Service] غير موجود، فقم بإضافته. الآن، اخرج من المحرر بالضغط على Ctrl + X.
لمحاكاة انهيار، ابحث عن معرف عملية (process ID) لـ MySQL عن طريق إدخال الأمر التالي:
|
1 |
sudo systemctl status mysql.service |
يعرض أمر التحقق من الحالة معرف العملية، وفي حالتنا هو 3555:

أدخل الأمر التالي لإنهاء العملية. استبدله بمعرف العملية الذي حصلت عليه على خادمك:
|
1 |
sudo kill -9 3555 |
أدخل الأمر التالي للتحقق من الحالة:
|
1 |
sudo systemctl status mysql.service |
تظهر المخرجات أن MySQL قيد التشغيل، ولكن بمعرف عملية جديد. هذا يعني أنه تمت إعادة تشغيلها تلقائيًا بعد الانهيار:

الخاتمة
في هذا البرنامج التعليمي، قدمنا لك أنظمة التهيئة الثلاثة في توزيعات Linux: وهي System V و Upstart و Systemd. لقد تعلمنا كيفية استخدام أي من أنظمة التهيئة لتكوين خدماتك التي تعمل باستمرار لتبدأ تلقائيًا بعد إعادة التشغيل أو انهيار النظام. يجب أن يكون هذا بمثابة نقطة انطلاق لك عندما تحتاج إلى تكوين خدماتك. كان الجزء الأول من هذه السلسلة في الغالب برنامجًا تعليميًا عمليًا وتطبيقيًا. الـ الجزء الثاني أكثر نظرية ويضم تفاصيل أكثر حول ما كنا نفعله في الجزء الأول. لا تحذف خوادم الاختبار الخاصة بك بعد، حيث ستستخدمها في الجزء الثاني أيضًا.
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.