قم بتشغيل أمر في Shell واستمر في تشغيل الأمر عند إغلاق الجلسة

StackOverflow https://stackoverflow.com/questions/431521

  •  08-07-2019
  •  | 
  •  

سؤال

أنا أستخدم المعجون للاتصال بخادم بعيد.ما أريد معرفته هو ما إذا كان هناك أي طريقة لكتابة أوامري والسماح لها بمواصلة التشغيل بعد إغلاق الجلسة مع PuTTY.والسبب في ذلك هو أنني لا أريد إبقاء الكمبيوتر قيد التشغيل طوال الوقت.هل هناك أي طريقة للقيام بذلك؟.

تحديث مع الحل

بالنسبة لسؤالي كما هو معروض، فإن الحل الأفضل هو استخدام أحد الأوامر المقدمة مثل nohup, ، لأنه ليس عليك تثبيت أي برامج إضافية.ولكن إذا كنت تواجه نفس المشكلة، استخدم الشاشة، وقم بتثبيتها واستخدامها.انه رائع.

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

هل كانت مفيدة؟

المحلول

nohup, disown, ، و screen كلها جيدة ولكن screen هو الأفضل لأنه على عكس الاثنين الآخرين، screen يتيح لك قطع الاتصال بالخادم البعيد، والحفاظ على تشغيل كل شيء، ثم إعادة الاتصال لاحقًا لمعرفة ما يحدث.مع nohup و disown لا يمكنك استئناف التفاعل.

نصائح أخرى

شاشة! إنه أفضل شيء منذ شرائح الخبز(نعم، أعلم أن آخرين قد اقترحوا ذلك بالفعل، ولكن من الجيد أن ينضم إليه العالم كله ويقترحه أيضًا).

الشاشة مثل، مثل، أممم ...مثل استخدام VNC أو ما شابه ذلك للاتصال بواجهة المستخدم الرسومية، ولكن لنوافذ الأوامر.يمكن أن يكون لديك عدة "نوافذ" مفتوحة مرة واحدة في نفس جلسة الشاشة.يمكنك القيام بأشياء مثل:

  1. ابدأ جلسة الشاشات باستخدام "screen -dR" (تعتاد على استخدام -dR)
    • تشغيل بعض الأوامر في نافذة واحدة
    • يضعط كنترول-أ,ج لإنشاء نافذة جديدة، افتح ملفًا هناك في vim
    • يضعط كنترول-أ,0 للعودة إلى النافذة الأولى وإصدار بعض الأوامر على الملف الذي قمت بتحريره للتو
    • كنترول-أ, 1 للعودة إلى جلسة vim الخاصة بك
    • كنترول-أ, ج لنافذة أخرى وربما تفعل "sudo - su" (لأنك تحتاج إلى غلاف جذر كامل)
    • كنترول-أ, 0 وابدأ عملية الخلفية
    • كنترول-أ, ج لإنشاء نافذة جديدة، "tail -f" السجل الخاص بعملية الخلفية تلك
    • كنترول-أ, د لفصل الشاشة بعد ذلك كنترول-د لقطع الاتصال بالخادم
    • اذهب في إجازة لمدة ثلاثة أسابيع
    • قم بتسجيل الدخول إلى الخادم مرة أخرى وأصدر "screen -dR" للاتصال بجلسة الشاشة الحالية
    • تحقق من السجل في النافذة الرابعة باستخدام كنترول-أ, 3 (يبدو الأمر كما لو كنت هناك تشاهده طوال الوقت)
    • كنترول-أ, 1 لالتقاط جلسة vim هذه مرة أخرى
    • أعتقد أنك بدأت في الحصول على الصورة الآن؟=)

إنه مثل السحر.لقد كنت أستخدم الشاشة لفترة أطول مما أستطيع أن أتذكره وما زلت مندهشًا تمامًا من مدى روعتها.

يحرر:فقط أريد أن أذكر أن هناك الآن أيضا com.tmux.يشبه إلى حد كبير جدا شاشة, ، ولكن لديه بعض الميزات الفريدة، وأبرزها تقسيم النوافذ.

جرب استخدام شاشة جنو.يسمح لك بفتح عدة قذائف في وقت واحد.ويمكنك قطع الاتصال بتلك الأصداف قيد التشغيل (أي.جلسة قريبة مع المعجون) وسيستمرون في القيام بعملهم.

ما تبحث عنه هو nohup.

راجع رابط الويكي لمعرفة كيفية استخدامه.

الشاشة هي الأفضل.

يحاول:

screen -dmS "MyTail" tail -f /var/log/syslog

أمر البدء هذا في الخلفية.

استخدم الشاشة -r للقائمة، و/أو الشاشة -r Mytail للدخول إلى الجلسة.

إذا كان المزيد من المستخدمين بحاجة إلى الوصول إلى نفس الجلسة، فاستخدم:screen -rx MyTail، ويشارك كلا المستخدمين أو أكثر الجلسة.

إذا كنت لا تستطيع استخدام screen (لأنه، على سبيل المثال، يتم تشغيل جلسة SSH الخاصة بك برمجيًا)، يمكنك أيضًا استخدام شيطاني لتشغيل البرنامج كبرنامج خفي.

إحدى الطرق التي تعمل بشكل جيد بالنسبة لي هي at.

at يعمل مثل كرون، ولكن لوظيفة لمرة واحدة.لقد استخدمته اليوم لتنزيل ملف كبير دون الحاجة إلى إبقاء الجلسة مستمرة.

على سبيل المثال:

$ at 23:55
at> wget http://file.to.download.com/bigfile.iso
at> ^D  

لقد نجحت at وقت (في المستقبل) ويعطيك مطالبة.أدخل الأوامر التي تريد تشغيلها في ذلك الوقت واضغط على ctrl+d.يمكنك الخروج من جلستك وسيتم تشغيل الأوامر في الوقت المحدد.

ويكيبيديا لديه المزيد من المعلومات حول at.

./command & disown
ssh localhost && ./command && exit
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top