إن كنت مطوراً على Linux، فأنت تدرك أهمية استمرارية جلسات العمل وثباتها. العمليات طويلة الأمد في Linux يجب أن تستمر حتى بعد تسجيل الخروج من الجلسة. لحسن الحظ، يوفر Linux أمراً مخصصاً لهذا الغرض. أمر nohup يتيح لك تشغيل الأوامر في الخلفية دون انقطاع، مما يحمي بياناتك من الضياع ويوفر عليك الوقت. سيأخذك هذا الدليل عبر كل ما تحتاج معرفته عن أمر nohup في Linux، من الصياغة والخيارات إلى أمثلة عملية وحلول للأخطاء الشائعة.
فهم صياغة أمر nohup في Linux
أمر nohup سهل الاستخدام ومباشر. يتيح لك تشغيل الأوامر أو السكريبتات في الخلفية، مع ضمان استمرار تنفيذها حتى بعد تسجيل الخروج من الطرفية. إليك طريقة استخدامه:
nohup [command] [arguments] &
استبدل [command] بالأمر أو السكريبت الذي تريد تشغيله. أما [argument] فهو أي معطيات أو خيارات يتطلبها الأمر. الرمز & يُرسل الأمر للتنفيذ في الخلفية. إليك مثالاً على ذلك:
nohup myscript.sh &
في هذا المثال، myscript.sh هو سكريبت bash سيواصل التشغيل حتى بعد إغلاق الطرفية. سيُعاد توجيه الإخراج إلى ملف باسم nohup.out افتراضياً، ما لم تحدد مساراً آخر.
استعراض خيارات nohup
على الرغم من أن أمر nohup لا يملك خيارات كثيرة، إلا أن معرفة كيفية استخدامه بفاعلية مع أوامر متعددة وتقنيات إعادة التوجيه يُحسّن أداءه. أولاً، لنرَ كيف يمكننا الحصول على معلومات حول أمر nohup:
nohup –-help nohup --version
يعرض هذان الأمران معلومات مفيدة من خلال رسالة المساعدة وإصدار nohup.
تشغيل عملية باستخدام أمر nohup
إذا أردت تشغيل عملية باستخدام أمر nohup، اتبع نفس البنية الموضحة في القسم السابق:
nohup [command]
إذا أردت تشغيل عملية في الخلفية، أضف & إلى نهاية الأمر.
تشغيل عمليات متعددة في الخلفية باستخدام أمر nohup
والآن، ماذا لو أردت تشغيل أكثر من عملية في الخلفية باستخدام أمر nohup؟
nohup bash -c '[command A] && [command B]' &
استبدل [command A] و [command B] مع الأوامر التي تريد تشغيلها في الخلفية. تخيّل أنك تريد أولاً تحديث حزم النظام ثم حذف الملفات غير الضرورية، وذلك باستخدام الأمر nohup:
nohup bash -c 'sudo apt-get update && sudo apt-get autoremove -y' &
في هذا المثال، nohup يتيح استمرار عمليتَي التحديث والتنظيف في الخلفية، فتكتمل مهام صيانة النظام دون الحاجة إلى إبقاء الطرفية مفتوحة.
إعادة توجيه الإخراج المخصص
سيُعاد توجيه مخرجات هذه العملية إلى nohup.out بشكل افتراضي. لكن ماذا لو أردت استقبال المخرجات في مسار آخر؟ إليك كيفية تحقيق ذلك:
nohup [command] > [/path/to/new/output.txt]
تذكّر أن تستبدل القيم الموجودة في [] بالأمر والمسار المطلوبين.
دمج nohup مع أوامر أخرى
يمكن دمج nohup مع أوامر أخرى والأنابيب لبناء سلاسل أوامر متكاملة. إليك مثالاً على ذلك:
nohup find / -name "*.log" | xargs grep "ERROR" > error_logs.txt 2>&1 &
هنا، يُستخدم الأمر ابحث عن للبحث عن ملفات السجلات، ويُستخدم grep للبحث عن المصطلح "ERROR". تُعاد توجيه المخرجات المجمّعة إلى error_logs.txt.
في هذا القسم، استعرضنا أكثر خيارات الأمر nohup شيوعاً وحالات استخدامه. بإتقان هذه التعليمات، يمكنك استخدام nohup بفاعلية لتشغيل عمليات Linux في الخلفية.
الأخطاء الشائعة واستكشاف الأعطال
استخدام الأمر nohup أمر مباشر في الغالب، غير أنك قد تصادف بعض الأخطاء الشائعة أثناء العمل. فهم هذه الأخطاء ومعرفة كيفية معالجتها يوفّر عليك الوقت والجهد. إليك أبرز هذه الأخطاء وكيفية التعامل معها:
رفض الصلاحية
يحدث هذا الخطأ حين لا يملك السكريبت أو الأمر الذي تحاول تشغيله صلاحية التنفيذ. يبدو الخطأ على النحو التالي: nohup: failed to run command 'myscript.sh': Permission denied
لحلّ هذه المشكلة، تحقّق من أن السكريبت أو الأمر يملك الصلاحيات الصحيحة. يمكنك إضافة صلاحية التنفيذ باستخدام chmod :
chmod +x myscript.sh nohup ./myscript.sh &
الأمر غير موجود
يحدث هذا الخطأ إذا لم يكن الأمر أو السكريبت موجوداً في المسار المحدد، أو لم يكن متاحاً في متغير PATH لديك. يبدو الخطأ على النحو التالي: nohup: failed to run command 'myscript.sh': No such file or directory
لحلّ هذا الخطأ، تحقّق من وجود الأمر أو السكريبت في المجلد الصحيح. قد تحتاج إلى تحديد المسار المطلق للسكريبت:
nohup /path/to/myscript.sh &
تأكّد أيضاً من أن الأمر مثبَّت ومتاح في متغير PATH لديك.
لا يوجد إخراج
أحياناً قد لا تجد أي مخرجات في الطرفية أو في ملف المخرجات. إذا كان الأمر يُنتج مخرجات لكنها لا تظهر، فقد تكون مُعاد توجيهها إلى مسار مختلف عن الملف الافتراضي، أو قد تكون هناك مشكلة في صلاحيات الملف. لتجاوز هذه المشكلة، حدّد ملف المخرجات صراحةً لضمان إعادة التوجيه بشكل صحيح:
nohup myscript.sh > output.log 2>&1 &
على سبيل المثال، يُعيد هذا الأمر توجيه كلٍّ من المخرجات القياسية والأخطاء القياسية إلى ملف باسم output.log.
السكريبت لا يعمل في الخلفية
في بعض الأحيان، يبدو أن السكريبت أو الأمر يعمل، لكنه ليس في الخلفية. السبب في الغالب بسيط: ربما نسيت إضافة & في نهاية الأمر لتشغيله في الخلفية. الحل بسيط أيضاً، تأكد فقط من إضافته وستكون جاهزاً.
عملية متوقفة أو لا تستجيب
قد تتوقف العملية التي تُشغَّل بـ nohup أو تصبح غير مستجيبة. يحدث هذا عادةً إذا كانت العملية تنتظر إدخالاً من المستخدم، أو إذا كانت هناك مشكلة في الموارد التي تحاول الوصول إليها. لهذه المشكلة حلّان:
- التحقق من الإدخال المطلوب: تأكد من أن الأمر لا يتطلب أي إدخال تفاعلي من المستخدم.
- مشكلات الموارد: تحقق من أن الأمر يملك صلاحية الوصول إلى الموارد الضرورية (مثل الملفات والشبكة).
الكتابة فوق nohup.out
إذا كنت تُشغّل عدة عمليات في الخلفية باستخدام الأمر nohup، فقد تقوم عن غير قصد بالكتابة فوق ملف nohup.out لتجنب هذه المشكلة، يمكنك تحديد مسار مختلف لكل عملية. بهذه الطريقة، تحصل كل عملية على ملف مخرجات خاص بها ولا يُكتب فوق المسار الافتراضي.
بالتعرف على الأخطاء الشائعة في nohup وحلولها، يمكنك استخدام الأمر nohup دون أي مشكلات.
خلاصة
يُعدّ الأمر nohup أداةً مفيدة لأي مستخدم Linux يحتاج إلى تشغيل العمليات في الخلفية، إذ يضمن استمرار عمل هذه العمليات حتى بعد تسجيل الخروج. في هذا الدليل، تناولنا الصياغة الأساسية، واستعرضنا الخيارات المتاحة، وناقشنا الأخطاء الشائعة مع نصائح لحلّها. إتقان الأمر nohup يُمكّنك من إدارة المهام طويلة الأمد بكفاءة، مما يرفع إنتاجيتك ويُعزز مهاراتك في إدارة الأنظمة.
إذا كنت مطوّر Linux وتبحث عن تحقيق أقصى استفادة من تجربتك، فكّر في الترقية إلى Linux VPSتقدم خدمة VPS السحابية لدينا دعماً على مدار الساعة وضماناً بنسبة 99.95% للتشغيل المستمر، مما يعني أن تطبيقاتك تعمل بلا انقطاع وبإمكانك الحصول على المساعدة في أي وقت. صُممت خدمة VPS لدينا لتلبية احتياجات مطوري Linux، مع توفير بنية تحتية موثوقة وموارد متاحة باستمرار. علاوةً على ذلك، يمكنك الحصول على توزيعة Linux المفضلة مثبّتةً مسبقاً، مما يُسرّع الإعداد ويُبسّطه. ارتقِ بمشاريع Linux إلى مستوى أعلى مع خدمة VPS التي توفر لك القدرة والمرونة اللتين تحتاجهما.
الأسئلة الشائعة
ما الفرق بين nohup و &?
nohup يمنع إنهاء العملية عند تسجيل المستخدم للخروج، بينما & يُشغّل العملية في الخلفية. استخدام nohup يضمن استمرار العملية بعد تسجيل الخروج، وبدمجه مع & يتيح تشغيلها في الخلفية.
لماذا يُستخدم nohup؟
nohup يُستخدم للتأكد من أن الأمر أو السكريبت يستمر في العمل حتى بعد تسجيل خروج المستخدم أو إغلاق الطرفية. وهو ضروري للعمليات طويلة الأمد التي يجب أن تبقى نشطة دون تدخل من المستخدم.
ما هو ملف nohup out؟
الـ nohup.out هو ملف المخرجات الافتراضي الذي يُعيد nohup إليه توجيه المخرجات القياسية والأخطاء القياسية للأمر. إذا لم يُحدَّد ملف مخرجات آخر، تُحفظ مخرجات الأمر في nohup.out في المجلد الحالي.