HOWTO Start/Stop Linux Service

السلام عليكم ورحمة الله وبركاته …

وبعد الغياب الطويل عن كتابة المواضيع التقنية قررت أن أكتب اليوم موضوع كنت قد وعدت الكثيرين بكتابته وهو يخص مسألة تشغيل وغلق الخدمات … الموضوع بسيط وصغير وسيمر بسرعة على الجميع إن شاء الله … نبدأ على بركة الله:
كل توزيعات لينوكس بمختلف أشكالها تأتي بوجود خدمات Services تعمل عليه … منها من يعمل عند تشغيل النظام ومنها من يعمل من خلال تشغيله أنت بنفسك … سأقوم بشرح الطريقتين بالتأكيد … أهم حاجة وهو إنه على الكل أن يعرف ما هو الـ runlevel الموجودة في لينوكس … لمن ﻻ يعرف عليه بقراءة الموضوع هذا

الآن الخدمات في لينوكس تأتي نوعين:
الأولى Standalone
الثانية Transient
الخدمات التي هي من نوع Standalone أي تعمل بصورة منفصلة وﻻ تحتاج الى خدمة ثانية لكي تعمل هي inetd، httpd، sshd وغيرها الكثير … أما الخدمات من نوع Transient والتي تحتاج بحد ذاتها الى خدمة ثانية لكي تعمل مثل الـ Telnet، rsync وغيرها التي تعتمد على خدمة xinetd … لمعرفة الخدمات تنتمي الى أي من هذين النوعين بإمكانك ذلك ببساطة من خلال عدة طرق، أسهل واحدة هي:

rul3z:~ # chkconfig --list

سيقوم بعرض قائمة طويلة مثل هذه:


alsasound                 0:off  1:off  2:off  3:on   4:off  5:on   6:off
apache2                   0:off  1:off  2:off  3:off  4:off  5:off  6:off
bluetooth                 0:off  1:off  2:off  3:off  4:off  5:off  6:off
cron                      0:off  1:off  2:off  3:off  4:off  5:off  6:off
cups                      0:off  1:off  2:off  3:off  4:off  5:off  6:off
joystick                  0:off  1:off  2:off  3:off  4:off  5:off  6:off
mysql                     0:off  1:off  2:off  3:off  4:off  5:off  6:off
network                   0:off  1:off  2:on   3:on   4:off  5:on   6:off
snort                     0:off  1:off  2:off  3:off  4:off  5:off  6:off
syslog                    0:off  1:off  2:on   3:on   4:off  5:on   6:off
vsftpd                    0:off  1:off  2:off  3:off  4:off  5:off  6:off
xinetd                    0:off  1:off  2:off  3:off  4:off  5:off  6:off
xinetd based services:
        chargen:            off
        chargen-udp:        off
        cups-lpd:           off
        daytime:            off
        daytime-udp:        off
        echo:               off
        echo-udp:           off
        netstat:            off
        rsync:              off
        systat:             off
        tftp:               off
        time:               off
        time-udp:           off
        vnc:                off

لقد قمت بحذف الكثير من السطور ﻷنه طويلة القائمة جدا … لمعرفة كل خدمة ماذا تعني وماذا تعمل أليك بالرابط هذا
نعود للشرح، كما نرى إنه القائمة مقسومة الى قسمين: قائمة في البداية وقائمة تأتي بعد الجملة xinetd based services … لو أخذنا سطر واحد من القائمة الأولى ولنفرض هذه:

 alsasound                 0:off  1:off  2:on   3:on   4:off  5:on   6:off 

لنفصل السطر لنفهم ماذا يعني … أوﻻ كلمة alsasound هي إسم الخدمة إذن نفعم إن هذا العامود يمثل الخدمات … 0:off تعني إنه الخدمة هذه موقوفة على الـ runlevel 0 أكيد موقوفة محلاها وهي تعمل خخخخخخ إذن هذا يمثل عامود الـ runlevel 0 … العامود الذي بعده هو للـ runlevel 1 وهي أيضا مغلقة هنا وعلى 2 تعمل وعلى 3 تعمل وعلى 4 ﻻ تعمل وذلك ﻷنه ماذا ؟؟؟ راجع موضوع الــ runlevels لتعرف بنفسك … وعلى 5 تعمل وأخيرا على 6 ﻻ تعمل … إذن كل عامود من هذه الأرقام تمثل لي runlevel وبجانبه أما off أو on … وكما هو ملاحظ من المثال الذي أخذناه فإنه الخدمة هذه تعمل على كل من الـ runlevel 2،3،5 …
الآن لوقف أو تشغيل هذه الخدمة على مستوى runlevel معيين ننفذ التالي:

chkconfig service_name on|off

يعني في حالة إيقاف التشغيل لمثالنا الذي أخذناه نعمل:

chkconfig alsasound off

للتأكد:

chkconfig alsasound --list | grep alsasound

سيظهر لك التالي:

alsasound                 0:off  1:off  2:off   3:off   4:off  5:off   6:off

الآن لتشغيلها قم بعمل التالي:

chkconfig alsasound on

وللتأكد:

chkconfig alsasound --list | grep alsasound

والناتج هو:

alsasound                 0:off  1:off  2:off  3:on   4:off  5:on   6:off

لتشغيل الخدمات على runlevel معيين أرجوا الرجوع الى الـ man chkconfig للإختلافات الموجودة في الأمر هذا بين التوزيعات. لكن مثلا على سوزي لتشغيل الخدمة هذه على الـ runlevel 5 فقط وغلقها على 3 نعمل:

chkconfig alsasound 5

للتأكد:

chkconfig alsasound --list | grep alsasound

الناتج هو:

alsasound                 0:off  1:off  2:off  3:off  4:off  5:on   6:off

لتشغيل الخدمة على runlevel 2 و 5 نفذ التالي:

chkconfig alsasound 25

للتأكد:

chkconfig alsasound --list | grep alsasound

الناتج:

alsasound                 0:off  1:off  2:on  3:off  4:off  5:on   6:off

ملاحظة مهمة جدا:
عملية التشغيل للخدمات بهذه الطريقة لن تتفعل بنفس اللحظة التي تنفذها خاصة الخدمات التي من نوع standalone … يعني لو شغلت خدمة معنية بإستخدام الأمر chkconfig تحتاج أما إنك تغيير الـ runlevel الذي أنت عليه أو إنك تعمل إعادة تشغيل أي إنه هذه الطريقة لتثبيت تشغيل الخدمات عندما تشغل الجهاز الخاص بك او السيرفر … أي ما بعد الـ Boot مباشرة … أما طريقة تشغيل الخدمات مباشرة ؟ تابع الموضوع :) أما الخدمات التي تعتمد مثلا على الـ xinetd في تشغيلها فبمجرد التشغيل ستتفعل الخدمة وتصبح تعمل وأليكم مثال:

rul3z:~ # chkconfig vnc on;
rul3z:~ # chkconfig --list | grep vnc;
        vnc:                on

لإيقافها ثاني:

rul3z:~ # chkconfig vnc off;
rul3z:~ # chkconfig --list | grep vnc;
        vnc:                off

لتشغيل الخدمات مباشرة هناك طرق كثيرة أيضا … منها من خلال الأمر service في توزيعات redhat و fedora وغيرها ومنها من خلال الrc في توزيعة SuSE أو من خلال الـ Yast في توزيعة SuSE أيضا … أو الطريقة التي أفضلها دائما وهي التشغيل المباشر !!! تابع معي لتعرف كيف … الطريقة هي كالتالي:

/etc/init.d/service_name start|stop|status|reload|restart

هذه الطريقة تغنيك عن معرفة أوامر مثل service و rpc أو أي نوع ثاني موجود على توزيعة أخرى … وأيضا هي نفس الطريقة التي أخترعوها جماعه الـ System V … كل الخدمات تقريبا ما عدا حالات قليلة لها خمس حالات:

1- start
2- stop
3- status
4- reload
5- restart

الحالة الأولى من إسمها تقوم بتشغيل الخدمة إن لم تكن تعمل سابقا … الحالة الثانية تقوم بغلق الخدمة إن لم تكن تعمل سابقا … الحالة الثالثة تقوم بعرض لك ما هي حالة الخدمة تعمل أم ﻻ … الحالة الرابعة تقوم بإعادة قراءة ملفات الإعدادات config files الخاصة بهذه الخدمة ولكنها غير موجودة مع كل الخدمات … الحالة الأخيرة من إسمها تقوم بإعادة تشغيل الخدمة إن كانت تعمل وإن لم تكن تعمل تقوم بتشغيلها …
أذن مثال لتشغيل الخدمة vsftpd كل ما علي فعله هو التالي:

/etc/init.d/vsftpd start

الناتج:

rul3z:~ # /etc/init.d/vsftpd start
Starting vsftpd                                                       done

لو عملنا التالي:

/etc/init.d/vsftpd status

ماذا سيظهر لنا ؟ أكيد إنه الخدمة تعمل … الناتج هو:

rul3z:~ # /etc/init.d/vsftpd status
Checking for service vsftpd                                           running

الآن لو عملنا التالي:

rul3z:~ # /etc/init.d/vsftpd stop
Shutting down vsftpd                                                  done

للتأكد:

rul3z:~ # /etc/init.d/vsftpd status
Checking for service vsftpd                                           unused

أي إن الخدمة ليست في حالة العمل … الآن لو قمت بتغيير في إعدادات الخدمة هذه نفذ التالي:

rul3z:~ # /etc/init.d/vsftpd reload
Reload service vsftpd                                                 done

آخر حالة هي إعادة التشغيل نعملها كما يلي:

rul3z:~ # /etc/init.d/vsftpd restart
Shutting down vsftpd                                                  done
Starting vsftpd                                                       done

كما نلاحظ إنه قام بإيقاف عمل الخدمة ومن ثم إعادة تشغيلها …
ملاحظة: الطريقة المباشرة هذه أفضلها على غيرها ولأنها من أساسيات UNIX أي إنها طريقة قديمة وتسهل عليك العمل على أي توزيعة أو أي نظام تابع لعالم الـ Nixware …
لتشغيل الخدمات بطريقة service كل ما عليك فعله هو:

service service_name start|stop|status|reload|restart

وأيضا ﻻ تنسوا ليس كل الخدمات فيها الحالة reload … مثال:

service sshd start
service sshd restart

وهكذا … هذه لمحبي فيدورا وريدهات … اما جماعة السوزي حدث وﻻ حرج في أنواع طرق التشغيل :) منها:

rcservice_name start

مثال:

rul3z:~ # rcvsftpd start
Starting vsftpd                                                       done

أو لوقف الخدمة:

rul3z:~ # rcvsftpd stop
Shutting down vsftpd                                                  done

طبعا الـ rc تأخذ حالات أكثر وهي:

start|stop|status|try-restart|restart|force-reload|reload

عليك بالـ man يا عزيزي القاريء وإﻻ أصبح التعليم كله spoon feeding :) … أيضا بإمكان محبي سوزي إستعمال yast أو yast2 في تشغيل الخدمات … وأيضا يوجد طريقة بديلة لهم للـ chkconfig إسمها insserv … أقرأ عنها عزيزي القاريء … أنا أديلك حلول سهلة وعليك الإختيار الطريقة التي تعجبك … في لينوكس كل الطرق تؤدي الى روما (المطلوب) …
أتمنى الحين الي يعاني من بطىء في توزيعته ما يروح يقول لي أنتقل الى توزيعة أخرى ﻷنه الي أنا عليها فاشلة ؟؟؟ ﻷنه سيكون السبب وجود خدمات كثيرة تعمل لست بحاجة لها فقط قم بإيقاف تشغيلها وشغل التي تحتاجهم فقط …
سؤال على الطاير: الطريقة المباشرة في التشغيل، لو شغلت خدمة معينة وأصبحت في حالة العمل وعملت إعادة تشغيل هل سترجع تعمل ثاني ام ستكون في حالة عدم العمل ؟ أم ستكون في ماذا ؟؟ أترك هذا السؤال لكم لتجاوبوا عليه ولتجربوه …
أتمنى الموضوع المتواضع ينال رضاكم وإستحسانكم … وأتمنى الإضافة عليه والتعليق والنقد أيضا … الموضوع هذا تحت الرخصة السفاحية: ألطشّ ولا تقلّقش … لنا عودة مع دروس أخرى قريبا إن شاء الله … أترككم في رعاية الله …

أخوكم [email protected]