ما هو برنامج Nohup وكيف تستخدمه؟
هناك العديد من الأوامر المتوفرة على أنظمة Linux. ستستخدم بعضها عدة مرات في اليوم ، في حين أن البعض الآخر محجوز عمومًا للاستخدامات الخاصة. nohupهو أحد هذه الأوامر. لن تستخدمها كل يوم ، لكنك ستشعر بالامتنان لوجودها عندما تحتاجها. هنا نوضح لك ما nohupهو وكيفية استخدامه.
ما هو نوهوب؟
nohupاختصار لعبارة “No Hangups”. إنه ليس أمرًا تديره بنفسك. nohupهو أمر تكميلي يخبر نظام Linux بعدم إيقاف أمر بمجرد بدئه. سيستمر العمل حتى يتم الانتهاء ، حتى إذا قام المستخدم الذي بدأها بتسجيل الخروج. إنه يخدم غرضًا مشابهًا إلى حد ما لـ tmux أو الشاشة ، مما يسمح لك ببدء عملية ولا تقلق بشأن ما إذا كانت ستنتهي إذا قمت بتسجيل الخروج أو قطع الاتصال بالخادم الخاص بك.
بناء الجملة لـ nohupبسيط ويبدو شيئًا كالتالي:
nohup sh your-script.sh &
لاحظ &في نهاية الأمر. يؤدي ذلك إلى نقل الأمر إلى الخلفية ، ويعيدك إلى الموجه الموجود على الجهاز الذي تعمل عليه. في كثير من الأحيان ، سيظل الأمر مرتبطًا بالمحطة ، لذلك ستنهيها في اللحظة التي تغلق فيها النافذة المفتوحة وتسبق الأمر بـ nohup.
nohupيعمل مع أي أمر تقوم بتشغيله في الجهاز. يمكن تشغيله باستخدام البرامج النصية المخصصة بالإضافة إلى أوامر النظام القياسية وأدوات سطر الأوامر المساعدة. استخدمه لبدء برنامج نصي لتدقيق الأمان على خادم بعيد بحيث يمكنك قطع الاتصال والمشي بعيدًا أو لتشغيل التحديثات في الخلفية وعدم إيقافها لأي شيء.
Nohup.out
نظرًا لأنه nohupيمكن أن يستمر في العمل بشكل مستقل عن المستخدم الذي بدأه ، فإن الأمر يحتاج إلى مكان ما لإخراج أي رسائل أو أخطاء. نظرًا لعدم وجود محطة طرفية لربطها بها ، يتم nohupتسجيل كل شيء في ملف الإخراج “nohup.out”
بشكل افتراضي ، يوجد هذا الملف في أي دليل بدأت الأمر فيه. يعتبر “nohup.out” فريدًا إلى حد ما ، حيث يحتوي على كل من الإخراج القياسي ومخرجات الخطأ. nohupيعيد توجيه كلاهما إلى نفس الملف افتراضيًا.
لا تحتاج بالضرورة إلى استخدام “nohup.out” ، فهو الخيار الافتراضي فقط. يمكنك تحديد إخراج مخصص عند تشغيله nohupووضعه في مكان مخصص.
nohup sh your-script.sh > / path / to / custom.out &
يحتوي الإخراج المخصص على نفس البيانات مثل ملف “nohup.out” القياسي وهو جيد لبرنامج تدقيق الأمان المذكور أعلاه. يمكنك تسميته “Audit-script-output.txt” في نوع من المجلدات البعيدة المثبتة وعرض الوضع الأمني لهذا الخادم من راحة الكمبيوتر المحمول الخاص بك بدلاً من البحث في catالمخرجات طوال اليوم.
حتى بالنسبة للمستخدمين العاديين يوميًا ، قد يكون تحديد ملف إخراج مخصص مفيدًا ، حيث سيسمح لك بالتمييز الواضح بين المخرجات. إذا كنت تستخدم هذا الأمر عدة مرات من مجلدك الافتراضي (الرئيسي) دون تحديد ملف إخراج ، فإن “nohup.out” سيُلحق نفسه بكل المخرجات ، مما يخلق القليل من الفوضى. إذا كنت ترغب في قراءة إخراج الأمر بطريقة منظمة ، فإن تحديد أسماء الملفات المخصصة لكل مخرجات يمنحك وسيلة للقيام بذلك بطريقتك الخاصة!
كيف يختلف Nohup عن الشيطان؟
عند هذه النقطة ، ربما تتساءل ما الذي يميز nohupالعملية التي تم إبطالها. بعد كل شيء ، يبدو أن كلاهما يخدم نفس الغرض نسبيًا ولكن لا يفعل ذلك حقًا.
تعمل Daemons بشكل مستمر في الخلفية. من الأفضل حجزها للعمليات التي لا تريد الخروج منها على الإطلاق ، مثل الخوادم. إنها تتطلب المزيد من العمل لبرمجتها أيضًا ، لذا فهي ليست الأفضل للبرامج النصية البسيطة التي تُستخدم لمرة واحدة.
nohupهو أكثر من أمر يستخدم مرة واحدة. فكر في الأمر كبرنامج نصي سيستغرق وقتًا طويلاً للتشغيل ولكنه سينتهي في النهاية. ربما هناك مهمة طويلة ومعقدة تقوم بتشغيلها بين الحين والآخر وتستغرق ساعات لإكمالها. لا تريد ترك الجهاز الطرفي مفتوحًا أو تسجيل دخول مستخدم ، لذا استخدمه nohupللحفاظ على تشغيله في الخلفية ووضع كل المخرجات في أي ملف تختاره ، سواء كان “nohup.out” الافتراضي أو موقع خيار.
تشغيل عملية مع Nohup
لتشغيل عملية باستخدام nohup، ضعها قبل أي أمر تقوم بتشغيله. يتضمن ذلك جميع البرامج العادية التي قد تقوم بتشغيلها ، مثل Discord أو Steam أو متصفحك أو محرر نصوص أو أي تطبيق آخر يمكنك التفكير فيه.
تذكر أنه يجب عليك فصل العملية الخاصة بك عن الموجه النشط حتى تتمكن من إغلاق الجهاز الطرفي دون أن تفقد العملية فجأة .
على سبيل المثال ، لفتح Kate (محرر النصوص الخاص بي) على نظامي وفصله عن الجهاز مع الاحتفاظ بسجل باستخدام “kate.log” ، أود كتابة هذا:
nohup kate > kate.log &
بعد إغلاق المحطة ، لا تزال كيت تعمل.
إذا كانت هناك مشكلة في بدء التطبيق ، فيمكنني ببساطة سحب “kate.log” ومعرفة الخطأ مباشرةً من الجهاز باستخدام:
القط kate.log
هذه العملية مفيدة لتحديد ما إذا كانت هناك مشكلة في تطبيق يرفض البدء أو يتصرف بطريقة متقطعة. عند بدء تشغيل برنامج مثل متصفحك ، غالبًا ما يتم تجاهل إشارات الخطأ الخاصة به. إن بدء تشغيلها في الجهاز nohupوتمرير المخرجات إلى ملف السجل يساعد في رسم صورة أوضح لما يمكن أن يسبب المشاكل.
تشغيل أوامر متعددة باستخدام Nohup
نظرًا لأنه يمكنك تمرير أي أمر nohup، يمكنك أيضًا تمرير تسلسل أوامر. للقيام بذلك بشكل صحيح ، سيتعين عليك استدعاء shell أولاً وتمرير الأوامر كسلسلة ، حيث تفسر معظم المحاكيات الطرفية كل أمر بعد الأول على أنه لا يسبقهnohup .
تحتوي كل توزيعة Linux حديثة على bash مثبتة ، لذلك نحن نتجاهل الأصداف المخصصة الأخرى ونستخدم ذلك في هذا المثال:
nohup bash -c ‘command1 && command2’ &
في هذا الأمر ، استدعينا bash لتنفيذ أمر وربطناهم بعلامة مزدوجة (&&). نحن نقول nohup”تشغيل bash -cبعلامة (تنفيذ) ومرر هذه السلسلة محاطة بعلامات اقتباس مفردة إليها.” ثم نطلب من الجهاز تحرير الموجه أثناء تشغيل التسلسل بأكمله في الخلفية.
أسئلة مكررة
لا يزال تطبيقي يغلق عندما أغلق الجهاز. ماذا علي أن أفعل؟
تحقق جيدًا من أنك كتبت علامة العطف (&) بعد الأمر. إذا كان لا يزال يغلق عند إغلاق الجهاز ، فحاول تشغيله مرة أخرى. ثم ، في سطر جديد ، اكتب:disown
يؤدي هذا إلى إزالة العملية الجارية تمامًا من قائمة مهام الجهاز. في بعض الحالات ، تبدأ العملية nohupوستستمر علامة العطف في طلب الإدخال والاستماع إلى الإشارات من الجهاز. عندما يتم إغلاق الجهاز ، إذا كان التطبيق لا يزال في قائمة الوظائف ، فإنه سيرسل أيضًا إشارات إليه. سيتم إغلاق التطبيق أيضًا إذا اعتبر أن إشارة الجهاز ستغلق.
إن التنكر منه يضمن عدم حدوث ذلك.
ماذا عن الأوامر التي تتطلب كلمة مرور الجذر ومدخلات أخرى؟
لا نوصي بتشغيل أمر يتطلب إدخالاً طرفيًا أو وصولاً إلى الجذر من خلاله nohup. إذا كنت مضطرًا إلى ذلك تمامًا ، فاقرأ الدليل الخاص بالأمر الذي تريد تشغيله ومعرفة ما إذا كان هناك خيار لتخطي التأكيدات. فمثلا،. لمجرد تشغيل مدير الحزم في Arch Linux بدون تأكيدات ، استخدم –noconfirmعلامته.
إنها منطقة غامضة وخطيرة للوصول إلى الجذر. إذا كنت تصر على تشغيل أحد الأوامر nohupكجذر ، فافعل ذلك بعد إدخال قشرة الجذر عن طريق كتابة su في الجهاز الطرفي والمتابعة معه. ستجد غالبًا أن التطبيقات التي تريد كلمة مرور الجذر الخاصة بك لن تتفاعل بشكل جيد مع هذا.
لماذا تقوم nohup بإعادة توجيه stderr إلى stdout؟
عند تشغيل أمر nohupما ، ستحصل على مخرجات تقرأ: nohup: تجاهل الإدخال وإعادة توجيه stderr إلى stdout
ما يعنيه هذا هو أنك لن تكون قادرًا بعد الآن على إرسال مدخلات طرفية إلى الأمر الذي قمت بتشغيله للتو ، وسيتم إعادة توجيه جميع البيانات التي تتدفق عادةً عبر الجهاز الطرفي إلى دفق واحد (stdout) ، ثم إخراجها إلى ملف ( افتراضيًا ، “nohup.out”).