मैं एक सहकर्मी की मदद कर रहा था, जिसे पृष्ठभूमि की प्रक्रिया में रुक-रुक कर समस्या आ रही थी।
मुझे पता चला कि वे सर्वर पर लॉग इन करके और निष्पादित करके पृष्ठभूमि की प्रक्रिया शुरू कर रहे थे:
su - <user> -c '<command>' &
"अहा", मैंने कहा। "यदि आप कमांड के साथ शुरू करते हैं" और "यह तब होगा जब आप कंट्रोलिंग टर्मिनल से बाहर निकलेंगे। आपको इसे प्राप्त करने के लिए नोह की तरह कुछ का उपयोग करने की आवश्यकता है। वास्तव में इस प्रक्रिया को डेमॉन, ट्यूट टुट के रूप में चलने का समर्थन करने की आवश्यकता है।"
हमने अपनी बात प्रदर्शित करने के लिए उपरोक्त कमांड का परीक्षण किया और ... यह काम करने लगा: कमांड द्वारा शुरू की गई प्रक्रिया तब बाहर नहीं निकली जब हमने उपरोक्त कमांड को चलाने वाले टर्मिनल से बाहर निकल गए।
कमांड एक कस्टम पायथन स्क्रिप्ट है जिसका आउटपुट किसी फाइल में जाता है। जहां तक मैं बता सकता हूं, स्क्रिप्ट में क्षमता जैसी कोई भी "बुद्धिमान" नहीं है। यह डेमन (कंप्यूटिंग): निर्माण पृष्ठ में सूचीबद्ध डेमन के रूप में चलाने के लिए आवश्यक चीजों में से कोई भी नहीं करता है ।
जैसा आदेश अपेक्षित हो वैसा ही चल रहा है:
<command> &
exit
उपरोक्त मामले में जब हम टर्मिनल से बाहर निकलते हैं तो कमांड द्वारा शुरू की गई पृष्ठभूमि प्रक्रिया समाप्त हो जाती है।
मेरा सवाल यह है:
जब हम "su - -c &" जोड़ते हैं तो क्या होता है जो हमारे टर्मिनल से बाहर निकलने पर प्रक्रिया को बाहर निकलने से रोकता है। मैं नियंत्रण टर्मिनल, मानक इनपुट और आउटपुट आदि के संबंध में विस्तार से समझना चाहूंगा।
क्या इस आदेश को पृष्ठभूमि प्रक्रिया के रूप में चलाने के लक्ष्य को प्राप्त करने का यह एक उचित तरीका है। यदि नहीं, तो क्यों नहीं?
मैं अपनी कंपनी के भीतर सर्वोत्तम प्रथाओं का प्रचार करना चाहता हूं, लेकिन मुझे जो भी सिफारिशें प्रदर्शित करने और बैक-अप करने में सक्षम होना चाहिए।
मैं यह भी समझना चाहता हूं कि वास्तव में क्या हो रहा है।
chroot --userspec root:root / sh -c "exec some_forever_process" &
। नौकरी उसी उपयोगकर्ता के रूप में चल रही है, जिसकेnohup
पहले याdisown
बाद में कोई स्पष्ट नहीं है । तो इस मामले के लिए, यह कैसे संकेत दिया जा सकता है कि टर्म एग्जिट पर वितरित नहीं किया जा सकता है।