जवाबों:
आपके पास दो मुख्य विकल्प हैं:
के साथ कमांड चलाएँ nohup
। यह इसे आपके सत्र से अलग कर देगा और आपके डिस्कनेक्ट होने के बाद इसे चालू रखना होगा:
nohup pythonScript.py
ध्यान दें कि nohup.out
जब तक आप इसे रीडायरेक्ट नहीं करते (तब तक nohup pythonScript.py > outfile
) कमांड के स्टडआउट को एक फाइल में जोड़ दिया जाएगा ।
जैसे स्क्रीन मल्टीप्लेक्स का उपयोग करें tmux
। यह आपको दूरस्थ मशीन से डिस्कनेक्ट करने देगा लेकिन फिर, अगली बार जब आप कनेक्ट करते हैं, यदि आप tmux attach
फिर से चलाते हैं, तो आप अपने आप को बिल्कुल उसी सत्र में पाएंगे। कमांड अभी भी चल रहा है (जब आप लॉग आउट करते हैं तो यह चालू रहेगा) और आप इसके स्टडआउट और स्टेडर को देख पाएंगे जैसे कि आपने कभी लॉग आउट नहीं किया है:
tmux
pythonScript.py
एक बार जब आप लॉन्च कर देते हैं, तो बस PuTTY विंडो बंद कर दें। फिर, अगले दिन फिर से कनेक्ट करें, फिर से दौड़ें tmux attach
और आप वहीं हैं जहाँ आपने शुरू किया था।
disown
2.screen
byobu
, tmux या स्क्रीन के चारों ओर एक आवरण।
screen
उपकरण, सभी Linux distros के लिए उपलब्ध है, इस का समर्थन करता है।
यह स्थापित करने के लिए चलाने के apt-get install screen
देब आधारित Linux distros के लिए, या
dnf install -y screen
या yum install -y screen
RPM- आधारित लोगों के लिए।
काम में लाना:
$ screen
एक नया खोल शुरू किया है। इस शेल में, आप अपनी पायथन स्क्रिप्ट शुरू कर सकते हैं। तो फिर तुम दबा सकते हैं Ctrl+ Shift+ Aतो D। यह आपके टर्मिनल को शेल से अलग करेगा जो आपकी स्क्रिप्ट चला रहा है। इसके अलावा, स्क्रिप्ट अभी भी इसमें चल रही है।
यह देखने के लिए कि आपकी स्क्रिप्ट कैसे चल रही है, आप कॉल कर सकते हैं screen -r
। यह आपके टर्मिनल को शेल के लिए खोल देगा, जिसे आपने पृष्ठभूमि में चल रहे पायथन स्क्रिप्ट के साथ खोल दिया है।
UPD: जैसा कि फॉक्स ने उल्लेख किया है, स्क्रीन सिस्टमड के साथ बुरी तरह से काम करता है, लेकिन हम स्क्रिप्ट को शुरू करने के लिए सिस्टमड का उपयोग कर सकते हैं, जैसे वे आधिकारिक उदाहरण में कहते हैं ।
उदाहरण के लिए, यदि आपकी स्क्रिप्ट शुरू होती है /usr/bin/myPythonScript
, तो आप इस तरह से Systemd यूनिट फाइल बना सकते हैं।
$ cat /etc/systemd/system/myPythonScript.service
[Unit]
Description=MyPythonScript
[Service]
ExecStart=/usr/bin/myPythonScript
[Install]
WantedBy=multi-user.target
थान, आप इस स्क्रिप्ट को शुरू कर सकते हैं
# systemctl daemon-reload
# systemctl start myPythonScript
यदि आप इस स्क्रिप्ट को सिस्टम स्टार्ट पर स्वचालित रूप से शुरू करना चाहते हैं -
# systemctl enable myPythonScript
कभी भी आप देख सकते हैं कि आपकी स्क्रिप्ट कैसे चल रही है
# systemctl status myPythonScript
विज्ञापन आप अपनी स्क्रिप्ट के लॉग की समीक्षा कर सकते हैं
# journalctl -u myPythonScript -e
screen
ठीक से नहीं चलता है systemd
। मुझे नहीं पता कि उबंटू उपयोग करता है systemd
, लेकिन व्यवहार और समाधान आपके जवाब में ध्यान देने योग्य हो सकता है
अधिकांश प्रक्रियाओं को इसके स्टडआउट, स्टडर, स्टडिन को रीडायरेक्ट करके मूर्ख बनाया जा सकता है (सभी विवरणक हमेशा रीडायरेक्ट करने के लिए आवश्यक नहीं होते हैं) और &
नियंत्रण ऑपरेटर का उपयोग करके ।
देखें कि ping example.com 1>/dev/null &
काम करता है।
बेशक, कुछ प्रोग्राम अधिक परिष्कृत होते हैं और ऐसे समाधानों की आवश्यकता होती है जैसे @terdon का उल्लेख किया गया है, लेकिन यह जानना अच्छा है कि क्या उपयोग करना सबसे अच्छा है।
संपादित करें: जैसा कि इस उत्तर में लिखा systemd
गया है लॉगआउट पर प्रक्रियाओं को मारता है। systemd
डिफ़ॉल्ट रूप से लॉगआउट पर मार प्रक्रियाओं के कुछ संस्करण , दूसरों को नहीं। इस व्यवहार को निम्नलिखित विकल्प को सेट करके /etc/systemd/logind.conf को संशोधित करके बदला जा सकता है। जैसा कि लिखा गया है, यह कुछ मुद्दों को भी हल कर सकता है जो आपके पास @ टेर्डन के समाधान के साथ हो सकते हैं।
से man logind.conf
:
KillUserProcesses=
एक बूलियन तर्क लेता है। कॉन्फ़िगर करता है कि जब उपयोगकर्ता लॉग आउट करता है, तो उपयोगकर्ता की प्रक्रियाओं को मार दिया जाना चाहिए। यदि सही है, तो सत्र के अनुरूप गुंजाइश इकाई और उस दायरे के अंदर की सभी प्रक्रियाओं को समाप्त कर दिया जाएगा। यदि गलत है, तो स्कोप "छोड़ दिया गया" है, देखें systemd.scope (5), और प्रक्रियाएं नहीं मारी जाती हैं। "हां" के लिए चूक, लेकिन विकल्प
KillOnlyUsers=
औरKillExcludeUsers=
नीचे देखें।सत्र प्रक्रियाओं के अलावा, उपयोगकर्ता प्रक्रिया उपयोगकर्ता प्रबंधक इकाई उपयोगकर्ता @। सेवा के तहत चल सकती है। लिंग सेटिंग्स के आधार पर, यह उपयोगकर्ताओं को उनके लॉगिन सत्रों से स्वतंत्र प्रक्रियाओं को चलाने की अनुमति दे सकता है। का विवरण देखें
enable-linger
मेंloginctl
(1)।ध्यान दें कि सेटिंग तब तक (1) और (1)
KillUserProcesses=yes
जैसे उपकरण तोड़ देगी , जब तक कि उन्हें सत्र के दायरे से बाहर नहीं किया जाएगा। (1) में उदाहरण देखें ।screen
tmux
systemd-run
अधिक जानने के लिए लिंक किया गया उत्तर पढ़ें।
isatty()
और बाहर निकलता है अगर यह नहीं है?"
nohup
।