मैं SSH लॉगआउट करने के बाद भी पृष्ठभूमि में पायथन स्क्रिप्ट कैसे चला सकता हूं?


110

मेरे पास पायथन स्क्रिप्ट है bgservice.pyऔर मैं चाहता हूं कि यह हर समय चले, क्योंकि यह मेरे द्वारा बनाई गई वेब सेवा का हिस्सा है। मैं SSH लॉगआउट करने के बाद भी इसे लगातार कैसे चला सकता हूं?

जवाबों:


213

भागो nohup python bgservice.py &hangup संकेत ध्यान न दें और चालू रखने के लिए स्क्रिप्ट प्राप्त करने के लिए। आउटपुट में डाला जाएगा nohup.out

आदर्श रूप में, आप अपनी स्क्रिप्ट को कुछ इस तरह से चलाएंगे superviseकि अगर (जब) ​​यह मर जाए तो इसे पुनः आरंभ किया जा सकता है।


15
जब मैं nohup और & के साथ कमांड चलाता हूं, तो मुझे nohup: ignoring in put and appending output to nohup.out'` संदेश मिलता है और जब मैं प्रेस करता हूं तो स्थिति के साथ बाहर निकलने की प्रक्रिया में प्रवेश होता है। 1. क्या चल रहा है?
संतोष घिमिरे

1
nohup.out में आउटपुट पढ़ें। मेरे मामले में, यह एक अनुमतियाँ समस्या थी, मैं sudo का उपयोग करने के लिए आवश्यक
mxns

और इस विधि के चलने के बाद bgservice को कैसे रोकें?
छेद में आग

1
@ शेयगोरथ कहीं न कहीं पिड को बचाते हैं ताकि आप बाद में प्रक्रिया को संकेत भेज सकें। कुछ गोले (बाश, ज़श, इत्यादि) में आप somecommand &इसे करने के बाद पिड को प्रिंट करेंगे [1] 12345। अन्यथा आप उपयोग कर सकते हैं $!
टोनी बीटा लाम्बा

31

यदि आपने पहले ही प्रक्रिया शुरू कर दी है, और इसे मारना नहीं चाहते हैं और नूप के तहत पुनः आरंभ करना चाहते हैं, तो आप इसे पृष्ठभूमि में भेज सकते हैं, फिर इसे डिस्क्राइब कर सकते हैं।

Ctrl+Z (प्रक्रिया स्थगित करें)

bg (पृष्ठभूमि में प्रक्रिया को पुनरारंभ करें

disown %1(यह मानते हुए नौकरी # 1 है, jobsयह निर्धारित करने के लिए उपयोग करें)


17

आप GNU स्क्रीन का उपयोग भी कर सकते हैं जो कि हर लिनक्स / यूनिक्स प्रणाली के बारे में होनी चाहिए।

यदि आप उबंटू / डेबियन पर हैं, तो इसका बढ़ाया वैरिएंट बायोबु बल्कि बहुत अच्छा है।


12

आप यहाँ वर्णित के अनुसार अपने अजगर की स्क्रिप्ट को एक उचित अजगर डेमॉन में बदलने पर विचार कर सकते हैं

पाइथन-डेमन एक अच्छा उपकरण है जिसका उपयोग अजगर स्क्रिप्ट को हमेशा के लिए चलने वाली स्क्रिप्ट के बजाय पृष्ठभूमि डेमॉन प्रक्रिया के रूप में चलाने के लिए किया जा सकता है। आपको मौजूदा कोड को थोड़ा संशोधित करने की आवश्यकता होगी, लेकिन इसका सादा और सरल।

यदि आप अजगर-डेमन के साथ समस्याओं का सामना कर रहे हैं, तो एक और उपयोगिता पर्यवेक्षक है जो आपके लिए भी ऐसा ही करेगा, लेकिन इस मामले में आपको कोई कोड नहीं लिखना होगा (या मौजूदा को संशोधित करना होगा) क्योंकि यह डैमेजिंग के लिए बॉक्स समाधान से बाहर है प्रक्रियाओं।


समस्या को कैसे हल किया जा सकता है, इसके बारे में एक संक्षिप्त विवरण देना आमतौर पर एक अच्छा विचार है।
निखिल साहू


5

यहां एक डेकोरेटर का उपयोग करके अजगर के अंदर एक सरल समाधान है:

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


1
शायद यह SIGHUP सिग्नल को पकड़ने के लिए आवश्यक है। फिर अपने ब्लॉक में signal.signal (signal.SIGHUP, हैंडलर) जोड़ें।
चाउटौ

3

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 का उपयोग नहीं करते हैं, लेकिन यह वास्तव में अच्छा शेल है जिसकी मैं सिफारिश करूंगा।


1

यदि आपको आवश्यकता है कि प्रक्रिया हमेशा के लिए चलनी चाहिए, भले ही आप लॉग इन हों या नहीं, प्रक्रिया को डेमॉन के रूप में चलाने पर विचार करें।

पर्यवेक्षक बॉक्स समाधान का एक शानदार तरीका है जिसका उपयोग किसी भी प्रक्रिया को निष्क्रिय करने के लिए किया जा सकता है। इसकी एक और नियंत्रित उपयोगिता supervisorctlहै जिसका उपयोग पर्यवेक्षक द्वारा चलाई जा रही प्रक्रियाओं की निगरानी के लिए किया जा सकता है।

इस कार्य को करने के लिए आपको कोई अतिरिक्त कोड लिखने या मौजूदा स्क्रिप्ट को संशोधित करने की आवश्यकता नहीं है। इसके अलावा, वर्बोज़ प्रलेखन इस प्रक्रिया को बहुत सरल बनाता है।

अजगर-डेमन के चारों ओर मेरे सिर को घंटों तक खरोंचने के बाद, पर्यवेक्षक वह समाधान है जो मेरे लिए मिनटों में काम करता है।

आशा है कि यह किसी को अजगर-डेमन काम करने में मदद कर रहा है



1

इसे इस्तेमाल करे:

nohup python -u <your file name>.py >> <your log file>.log &

आप स्क्रीन में ऊपर कमांड चला सकते हैं और स्क्रीन से बाहर आ सकते हैं।

अब आप अपने पायथन लिपि के लॉग को पूंछ सकते हैं: tail -f <your log file>.log

आपको स्क्रिप्ट को मारने के लिए, आप ps -aux और किल कमांड का उपयोग कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.