كيفية تشغيل برنامج Linux عند بدء التشغيل باستخدام systemd
نشرت: 2022-01-29هل تحتاج إلى تشغيل برنامج Linux عند التمهيد؟ يوفر برنامج systemd طريقة للقيام بذلك على أي توزيعة Linux مع systemd - وهي معظمها هذه الأيام ، بما في ذلك Ubuntu. سنرشدك خلال عملية إنشاء خدمة متكاملة - بل إنها تتحدث إلى المجلة.
يوضح هذا البرنامج التعليمي كيفية إعداد خدمة النظام التي يتم تشغيلها عند بدء تشغيل النظام الخاص بك. لبدء تشغيل برنامج رسومي عند تسجيل الدخول ، استخدم مدير بدء تشغيل سطح المكتب بدلاً من ذلك.
تشغيل البرامج عند بدء التشغيل
في بعض الأحيان ، يتم ربط البرنامج الذي تقوم بتثبيته على جهاز الكمبيوتر الخاص بك بعملية بدء تشغيل Linux ، بحيث يتم تشغيل البرنامج تلقائيًا في كل مرة يتم فيها تشغيل الكمبيوتر. يمكنك بسهولة تحقيق نفس السلوك مع البرامج والبرامج النصية الخاصة بك ، أو في الواقع أي برنامج آخر موجود على جهاز الكمبيوتر الخاص بك.
يتم التحكم في البرامج التي يتم إطلاقها عند بدء التشغيل بواسطة systemd
النظام ، والنظام ومدير الخدمة. systemd
هي أول عملية يتم تشغيلها عند بدء التشغيل. يحتوي دائمًا على معرف العملية (PID) 1. يتم بدء كل عملية أخرى قيد التشغيل في جهاز الكمبيوتر الخاص بك عن طريق systemd
، أو عن طريق عملية بدأها systemd
بالفعل.
البرامج التي تعمل في الخلفية تسمى شياطين أو خدمات. يرمز الحرف "d" في نهاية systemd
إلى الخفي. في هذه المقالة ، سننشئ خدمة نموذجية. لتحديد جميع المربعات ، يجب أن تكون خدمتنا:
- متكامل مع
systemd
من خلال ملف وحدة الخدمة - انطلقت عند بدء التشغيل
- يمكن التحكم فيه باستخدام
systemctl
، واجهة التحكم لنظامsystemd
- قادرة على الكتابة إلى المجلة
إنشاء برنامج الخدمة
نحتاج إلى برنامج systemd
. سننشئ نصًا بسيطًا يسمى "htg.sh". يستخدم هذا البرنامج التعليمي محرر نصوص Gedit ، ولكن يمكنك استخدام أي محرر نصوص تفضله.
المس htg.sh
gedit htg.sh
سيتم فتح محرر gedit
. انسخ والصق النص التالي في المحرر.
#! / بن / باش صدى "htg.service: ## ابتداء من ##" | معلومات systemd-cat -p في حين : فعل TIMESTAMP = $ (التاريخ '+٪ Y-٪ m-٪ d٪ H:٪ M:٪ S') صدى "htg.service: timestamp $ {TIMESTAMP}" | معلومات systemd-cat -p ينام 60 فعله
احفظ التغييرات وأغلق المحرر.
لا يقدم النص الكثير ، ولكن هناك بعض النقاط الجديرة بالملاحظة.
- يتم تمرير خطي
echo
عبرsystemd-cat
، وهو برنامج يأخذ الإخراج من برنامج ويرسله إلى المجلة. يتم إعطاء الأولوية للمداخلات في المجلة. نحن نستخدم الخيار-p
(الأولوية) للإشارة إلى أن رسائلنا هي للمعلومات (المعلومات) فقط. إنها ليست أخطاء أو تحذيرات مهمة. - هناك حلقة
while
لا نهاية لها. - يتم تعيين متغير
TIMESTAMP
على التاريخ والوقت الحاليين. يتم تنسيق هذا في رسالة وإرسالها إلى المجلة. - ثم ينام النص لمدة 60 ثانية.
- بعد 60 ثانية تتكرر الحلقة. لذلك ، يكتب هذا النص رسالة ذات طابع زمني إلى المجلة مرة واحدة في الدقيقة.
سنقوم بنسخ البرنامج النصي إلى دليل /usr/local/bin
.
sudo cp htg.sh / usr / local / bin
ونحتاج إلى جعله قابلاً للتنفيذ:
sudo chmod + x /usr/local/bin/htg.sh
إنشاء ملف وحدة الخدمة
يحتوي كل برنامج يتم تشغيله بواسطة systemd
على ملف تعريف يسمى ملف وحدة الخدمة. يحمل هذا سمات معينة يمكن أن يستخدمها systemd
لتحديد موقع البرنامج وتشغيله ، وتحديد بعض سلوكه.
نحتاج إلى إنشاء ملف وحدة لخدمتنا الجديدة ، ولكن من الحكمة التأكد من عدم وجود أي من ملفات الوحدة الحالية بالاسم الذي نريد تقديمه لخدمتنا الجديدة.
sudo systemctl list-unit-files - type-service
يمكنك التمرير خلال قائمة ملفات الوحدة ، والتي تم فرزها أبجديًا ، والتحقق من عدم استخدام الاسم الذي تريد استخدامه.
ستطلق على خدمتنا اسم "htg.service". لا توجد ملفات وحدة بهذا الاسم ، لذا يمكننا المتابعة وإنشاء ملف الوحدة الخاص بنا.
sudo gedit /etc/systemd/system/htg.service
سيتم فتح محرر gedit
. انسخ والصق النص التالي في المحرر:
[وحدة] الوصف = مثال خدمة How-To Geek يريد = network.target بعد = syslog.target network-online.target [خدمة] اكتب = بسيط ExecStart = / usr / local / bin / htg.sh إعادة التشغيل = عند الفشل RestartSec = 10 KillMode = عملية [تثبيت] WantedBy = multi-user.target
احفظ التغييرات وأغلق المحرر.
المداخل لها هذه المعاني. هذه مداخل نموذجية. لا تحتاج خدمتنا البسيطة في الواقع إلى معظمها ، ولكن تضمينها يسمح لنا بشرحها.
- الوصف: هذا وصف نصي لخدمتك.
- يريد: تريد خدمتنا - ولكنها لا تتطلب - أن تكون الشبكة جاهزة قبل بدء خدمتنا.
- بعد: قائمة بأسماء الوحدات التي يجب أن تبدأ بعد بدء هذه الخدمة بنجاح ، إذا لم تكن قيد التشغيل بالفعل.
- النوع: بسيط. سوف يعتبر
systemd
أن هذه الخدمة قد بدأت بمجرد أن يتم تفرع العملية المحددة من قبلExecStart
. - ExecStart: المسار إلى العملية التي يجب أن تبدأ.
- إعادة التشغيل: متى وما إذا كان يجب إعادة تشغيل الخدمة. لقد وضعناها على "عند الفشل".
- RestartSec: ما هي مدة الانتظار قبل محاولة إعادة تشغيل الخدمة. هذه القيمة بالثواني.
- KillMode: يحدد كيف يجب أن يقتل
systemd
العملية إذا طلبنا منsystemctl
إيقاف الخدمة. لدينا هذه المجموعة "العملية". هذا يجعلsystemd
يستخدم إشارةSIGTERM
في العملية الرئيسية فقط. إذا كانت خدمتنا برنامجًا غير تافه بدلاً من برنامج نصي بسيط ، فسنقوم بتعيين هذا على "مختلط" لضمان إنهاء أي عمليات منتجة أيضًا. - WantedBy: لقد قمنا بتعيين هذا على "multi-user.target" ، مما يعني أن الخدمة يجب أن تبدأ طالما أن النظام في حالة يمكن لعدة مستخدمين تسجيل الدخول إليها ، سواء كانت واجهة مستخدم رسومية متاحة أم لا.
لا يلزم أن يكون ملف الوحدة قابلاً للتنفيذ ، لكن الأذونات في ملف الوحدة يجب أن تقيد من يمكنه تحريره. لا تريد أن يقوم مستخدم ضار أو مؤذ بتغيير ملف الوحدة بحيث ينفذ برنامجًا مختلفًا تمامًا.
سيعطي هذا الأمر المالك أذونات القراءة والكتابة ، وقراءة الأذونات للمجموعة. لن يكون لدى الآخرين أي أذونات.
sudo chmod 640 /etc/systemd/system/htg.service
يمكننا أن systemctl
يتحقق من بناء جملة ملف الوحدة لدينا ، حتى لو لم تكن الخدمة قيد التشغيل بعد. سيتم الإبلاغ عن أي أخطاء. (في الواقع ، يعد جزء "الخدمة" اختياريًا لمعظم الأوامر.)
systemctl status htg.service
لم يتم تمييز أي أخطاء ، مما يعني أن ملف وحدتنا صحيح من الناحية التركيبية.
بدء الخدمة
عند إضافة ملف وحدة جديد أو تحرير ملف موجود ، يجب أن تخبر systemd
بإعادة تحميل تعريفات ملف الوحدة.
sudo systemctl الخفي إعادة تحميل
إذا كنت تريد إطلاق خدمة عند بدء التشغيل ، فيجب عليك تمكينها :
sudo systemctl تمكين htg
لا يؤدي تمكين الخدمة إلى بدء تشغيلها ، بل يعيِّنها فقط ليتم تشغيلها في وقت التمهيد. لبدء الخدمة الآن ، يجب عليك استخدام systemctl
مع خيار start
.
sudo systemctl ابدأ htg
التحقق من الخدمة
بعد بدء الخدمة يدويًا أو بعد إعادة تشغيل الكمبيوتر ، يمكننا التحقق من أن خدمتنا تعمل بشكل صحيح.
sudo systemctl الحالة htg.service
يتم عرض حالة الخدمة بالنسبة لنا.
- تعني النقطة الخضراء أن خدمتنا تعمل بسلاسة.
- اسم الخدمة "htg.service" ، والوصف الطويل هو الاسم الذي قدمناه في ملف الوحدة.
- لقد أظهرنا ملف الوحدة الذي تم تحميله "/etc/systemd/system/htg.service".
- الخدمة نشطة ، والوقت الذي تم إطلاق الخدمة فيه مدرج بالنسبة لنا.
- معرف المنتج هو 7762.
- هناك نوعان من المهام المرتبطة بالخدمة.
- يتم استخدام إجمالي 928 كيبي بايت من الذاكرة بواسطة الخدمة.
- تتضمن مجموعة التحكم البرنامج النصي "htg.sh" وأمر
sleep
الذي تم تشغيله بواسطة "htg.sh." في معظم الأوقات ، سيقوم أمرsleep
بالعمل لهذه الخدمة.
تم أيضًا عرض آخر 10 إدخالات يومية أنتجتها هذه الخدمة. مما لا يثير الدهشة ، أنهم جميعًا يفصلون دقيقة واحدة.
ايقاف وتعطيل الخدمة
إذا كنت بحاجة إلى إيقاف الخدمة ، فيمكنك القيام بذلك باستخدام هذا الأمر:
sudo systemctl توقف htg.service
يؤدي هذا إلى إيقاف الخدمة ، لكنه لا يمنعها من إعادة التشغيل في المرة التالية التي يتم فيها إعادة تشغيل الكمبيوتر. لإيقاف تشغيل الخدمة عند بدء التشغيل ، تحتاج إلى تعطيلها :
sudo systemctl تعطيل htg.service
إذا كانت الخدمة قيد التشغيل ، فإن هذا الأمر لا يوقفها. إنه ببساطة يخبر systemd
بعدم تشغيل الخدمة عند إعادة التشغيل التالية.
إذا كنت تريد إيقاف الخدمة ومنعها من التشغيل عند بدء التشغيل ، فاستخدم كلا الأمرين.
نصيحة الخدمة
تأكد من تشغيل برنامجك بالشكل المتوقع قبل محاولة تشغيله كخدمة.
أوامر لينكس | ||
الملفات | tar · pv · cat · tac · chmod · grep · diff _ _ _ _ _ _ _ _ _ _ _ · ذيل · ستات · ls · fstab · صدى · أقل · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · تثبيت · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · تحويل · rclone · shred · srm | |
العمليات | الاسم المستعار · شاشة · أعلى · لطيف · رينييس · تقدم · ستريس · systemd · tmux · chsh · تاريخ · في · دفعة · مجانية · أي · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · نعم · قتل · نوم · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg | |
الشبكات | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · حفر · إصبع · nmap · ftp · curl · wget · who · who · w · iptables · ssh-keygen · ufw |
ذات صلة: أفضل أجهزة كمبيوتر Linux المحمولة للمطورين والمتحمسين