شروحات الكمبيوتر والإنترنت والموبايل

كيفية تحديد الدليل الحالي في برنامج شل يعمل بواسطة systemd

عندما يتعلق الأمر بتشغيل البرامج النصية في بيئة Linux، يمكن أن تنشأ تحديات معينة خاصةً عندما يتم بدء تشغيل هذه البرامج بواسطة نظام systemd. من بين هذه التحديات تحديد الدليل الحالي (Current Directory) الذي يجب أن يعمل فيه البرنامج النصي. في هذا المقال، سنتناول كيفية تعيين دليل جديد للبرامج النصية التي يتم تشغيلها بواسطة systemd، وسنستكشف مشكلة تتعلق بتنفيذ برنامج نصي معين.

مقدمة إلى systemd وأهميته في Linux

systemd هو نظام إدارة للعمليات والخدمات في أنظمة Linux، وهو يمثل الطريقة الرئيسية لإدارة الخدمات في العديد من التوزيعات الحديثة. من خلال استخدام systemd، يمكننا تشغيل خدمات في الخلفية، والتعامل مع الاعتماديات، وإدارة عملية الإقلاع بشكل أفضل. لكن في بعض الأحيان، قد نواجه مشكلات عند تشغيل البرامج النصية، خاصة إذا كانت تعتمد على دلائل معينة.

تحديد الدليل الحالي في البرنامج النصي

عند تشغيل البرامج النصية باستخدام systemd، يتم تشغيلها عادةً في سياق الدليل الجذري (/). وهذا يعني أن أي أمر cd داخل البرنامج النصي قد يفشل إذا كان الهدف لا يتواجد في السياق الحالي. على سبيل المثال، إذا حاولنا تنفيذ أمر cd /home/bernard/p1meter من برنامج نصي تابع لـ systemd، قد نحصل على رسالة خطأ تشير إلى عدم القدرة على الانتقال إلى هذا الدليل.

تحليل مشكلة البرنامج النصي

في الحالة المقدمة، يتم تنفيذ البرنامج النصي /home/bernard/p1meter/getdate.sh، والذي يحتوي على السطر التالي:

cd /home/bernard/p1meter

وعندما يتم تنفيذ البرنامج النصي باستخدام الأمر sudo systemctl start getdata.service، يفشل النظام في العثور على الدليل home/bernard/p1meter، مما ينتج عنه رسالة خطأ توضح ذلك. من هنا نفهم أن المشكلة تكمن في السياق الذي يتم فيه تشغيل البرنامج النصي.

كيفية حل المشكلة

لحل هذه المشكلة وتحديد الدليل الجديد بشكل صحيح عند تشغيل البرنامج النصي من خلال systemd، يمكننا استخدام خاصية WorkingDirectory في ملف الخدمة (service file). يجب عليك فتح ملف الخدمة المخصص (getdata.service) وإضافة السطر التالي:

[Service]
WorkingDirectory=/home/bernard/p1meter

بهذه الطريقة، سيكون مسار العمل للبرنامج النصي محددًا بشكل صحيح، مما يسمح بتنفيذ الأوامر بنجاح.

الاختبار والتحقق

بعد إجراء التعديلات اللازمة، يجب عليك إعادة تحميل إعدادات systemd بواسطة الأمر:

sudo systemctl daemon-reload

ثم يمكنك بدء الخدمة مرة أخرى:

sudo systemctl start getdata.service

للتحقق من العمليات التي تمت، يمكنك الاطلاع على السجلات باستخدام:

journalctl -u getdata.service

بهذه الطريقة، يمكنك التأكد من أن البرنامج النصي يعمل بشكل صحيح وأنه لم يعد يتعطل عند محاولة الانتقال إلى الدليل المحدد.

خلاصة

إدراك كيفية تحديد الدليل الحالي في البرامج النصية التي تبدأ عن طريق systemd هو أمر بالغ الأهمية لأي مطور أو مسؤول نظام يستخدم Linux. من خلال استخدام خيار WorkingDirectory، يمكن حل العديد من المشكلات التي تنجم عن عدم القدرة على الانتقال إلى دلائل معينة. من المهم دائمًا اختبار الخدمة لضمان أنها تعمل كما هو متوقع.

بهذا نكون قد قدمنا لك نظرة شاملة حول كيفية التعامل مع البرامج النصية التي تشغل بواسطة systemd في Linux، ونتمنى أن تساعدك هذه المعلومات في اجتياز أي عقبات قد تواجهها في المستقبل.

فهد السلال

خبير تقني متخصص في شروحات الكمبيوتر والإنترنت والموبايل، يتمتع بخبرة واسعة في تقديم حلول تقنية مبتكرة ومبسطة. يهدف فهد إلى مساعدة المستخدمين على تحسين تجربتهم التقنية من خلال مقالات وأدلة عملية واضحة وسهلة الفهم.
زر الذهاب إلى الأعلى
Don`t copy text!