जवाबों:
भागो nohup python bgservice.py &
hangup संकेत ध्यान न दें और चालू रखने के लिए स्क्रिप्ट प्राप्त करने के लिए। आउटपुट में डाला जाएगा nohup.out
।
आदर्श रूप में, आप अपनी स्क्रिप्ट को कुछ इस तरह से चलाएंगे supervise
कि अगर (जब) यह मर जाए तो इसे पुनः आरंभ किया जा सकता है।
somecommand &
इसे करने के बाद पिड को प्रिंट करेंगे [1] 12345
। अन्यथा आप उपयोग कर सकते हैं $!
।
यदि आपने पहले ही प्रक्रिया शुरू कर दी है, और इसे मारना नहीं चाहते हैं और नूप के तहत पुनः आरंभ करना चाहते हैं, तो आप इसे पृष्ठभूमि में भेज सकते हैं, फिर इसे डिस्क्राइब कर सकते हैं।
Ctrl+Z
(प्रक्रिया स्थगित करें)
bg
(पृष्ठभूमि में प्रक्रिया को पुनरारंभ करें
disown %1
(यह मानते हुए नौकरी # 1 है, jobs
यह निर्धारित करने के लिए उपयोग करें)
आप GNU स्क्रीन का उपयोग भी कर सकते हैं जो कि हर लिनक्स / यूनिक्स प्रणाली के बारे में होनी चाहिए।
यदि आप उबंटू / डेबियन पर हैं, तो इसका बढ़ाया वैरिएंट बायोबु बल्कि बहुत अच्छा है।
आप यहाँ वर्णित के अनुसार अपने अजगर की स्क्रिप्ट को एक उचित अजगर डेमॉन में बदलने पर विचार कर सकते हैं ।
पाइथन-डेमन एक अच्छा उपकरण है जिसका उपयोग अजगर स्क्रिप्ट को हमेशा के लिए चलने वाली स्क्रिप्ट के बजाय पृष्ठभूमि डेमॉन प्रक्रिया के रूप में चलाने के लिए किया जा सकता है। आपको मौजूदा कोड को थोड़ा संशोधित करने की आवश्यकता होगी, लेकिन इसका सादा और सरल।
यदि आप अजगर-डेमन के साथ समस्याओं का सामना कर रहे हैं, तो एक और उपयोगिता पर्यवेक्षक है जो आपके लिए भी ऐसा ही करेगा, लेकिन इस मामले में आपको कोई कोड नहीं लिखना होगा (या मौजूदा को संशोधित करना होगा) क्योंकि यह डैमेजिंग के लिए बॉक्स समाधान से बाहर है प्रक्रियाओं।
आप इसे नोहअप कर सकते हैं, लेकिन मैं स्क्रीन को प्राथमिकता देता हूं ।
यहां एक डेकोरेटर का उपयोग करके अजगर के अंदर एक सरल समाधान है:
import os, time
def daemon(func):
def wrapper(*args, **kwargs):
if os.fork(): return
func(*args, **kwargs)
os._exit(os.EX_OK)
return wrapper
@daemon
def my_func(count=10):
for i in range(0,count):
print('parent pid: %d' % os.getppid())
time.sleep(1)
my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own
आप निश्चित रूप से अपनी bgservice.py
फ़ाइल की सामग्री को इसके स्थान पर बदल सकते हैं my_func
।
Zsh खोल nohup के साथ चलाने के सभी पृष्ठभूमि प्रक्रियाओं बनाने के लिए एक विकल्प है।
में ~/.zshrc
पंक्तियां जोड़ें:
setopt nocheckjobs #don't warn about bg processes on exit
setopt nohup #don't kill bg processes on exit
फिर आपको बस एक प्रक्रिया को चलाने की आवश्यकता है: python bgservice.py &
और अब आपको nohup कमांड का उपयोग करने की आवश्यकता नहीं है।
मुझे पता है कि बहुत से लोग zsh का उपयोग नहीं करते हैं, लेकिन यह वास्तव में अच्छा शेल है जिसकी मैं सिफारिश करूंगा।
यदि आपको आवश्यकता है कि प्रक्रिया हमेशा के लिए चलनी चाहिए, भले ही आप लॉग इन हों या नहीं, प्रक्रिया को डेमॉन के रूप में चलाने पर विचार करें।
पर्यवेक्षक बॉक्स समाधान का एक शानदार तरीका है जिसका उपयोग किसी भी प्रक्रिया को निष्क्रिय करने के लिए किया जा सकता है। इसकी एक और नियंत्रित उपयोगिता supervisorctl
है जिसका उपयोग पर्यवेक्षक द्वारा चलाई जा रही प्रक्रियाओं की निगरानी के लिए किया जा सकता है।
इस कार्य को करने के लिए आपको कोई अतिरिक्त कोड लिखने या मौजूदा स्क्रिप्ट को संशोधित करने की आवश्यकता नहीं है। इसके अलावा, वर्बोज़ प्रलेखन इस प्रक्रिया को बहुत सरल बनाता है।
अजगर-डेमन के चारों ओर मेरे सिर को घंटों तक खरोंचने के बाद, पर्यवेक्षक वह समाधान है जो मेरे लिए मिनटों में काम करता है।
आशा है कि यह किसी को अजगर-डेमन काम करने में मदद कर रहा है
आप यापडी का उपयोग भी कर सकते हैं :
मूल उपयोग:
import yapdi daemon = yapdi.Daemon() retcode = daemon.daemonize() # This would run in daemon mode; output is not visible if retcode == yapdi.OPERATION_SUCCESSFUL: print('Hello Daemon')
इसे इस्तेमाल करे:
nohup python -u <your file name>.py >> <your log file>.log &
आप स्क्रीन में ऊपर कमांड चला सकते हैं और स्क्रीन से बाहर आ सकते हैं।
अब आप अपने पायथन लिपि के लॉग को पूंछ सकते हैं: tail -f <your log file>.log
आपको स्क्रिप्ट को मारने के लिए, आप ps -aux और किल कमांड का उपयोग कर सकते हैं ।
nohup: ignoring in put and appending output to
nohup.out'` संदेश मिलता है और जब मैं प्रेस करता हूं तो स्थिति के साथ बाहर निकलने की प्रक्रिया में प्रवेश होता है। 1. क्या चल रहा है?