आप पायथन में एक डेमॉन कैसे बनाते हैं?


244

Google पर खोज करने से x2 कोड स्निपेट का पता चलता है। पहला परिणाम इस कोड नुस्खा का है जिसमें कुछ उपयोगी चर्चा के साथ बहुत सारे प्रलेखन और स्पष्टीकरण हैं।

हालाँकि, एक अन्य कोड नमूना , जिसमें बहुत अधिक दस्तावेज़ नहीं हैं, जिसमें पासिंग कमांड जैसे कि स्टार्ट, स्टॉप और रिस्टार्ट का नमूना कोड शामिल है। यह एक पीआईडी ​​फ़ाइल भी बनाता है जो यह जांचने के लिए आसान हो सकती है कि क्या डेमन पहले से चल रहा है आदि।

ये नमूने बताते हैं कि डेमॉन कैसे बनाया जाता है। क्या कोई अतिरिक्त चीजें हैं जिन पर विचार करने की आवश्यकता है? क्या एक नमूना दूसरे से बेहतर है, और क्यों?


1
मैंने हमेशा डीमॉनेटाइजेशन कोड को अनावश्यक पाया है। क्यों नहीं सिर्फ खोल ऐसा करते हैं?
emil.p.stanchev

17
क्योंकि यह setidgr या setpgrp नहीं करता है।
बर्मगुलिज़

4
पर्यवेक्षण का प्रयोग करें । इस तरह आपको फोर्क () की जरूरत नहीं है या आप स्टड / स्टडर को रीडायरेक्ट करते हैं। बस एक सामान्य कार्यक्रम लिखें।
गुएटली

जवाबों:


169

वर्तमान समाधान

पीईपी 3143 (स्टैंडर्ड डेमन प्रोसेस लाइब्रेरी) का एक संदर्भ कार्यान्वयन अब अजगर-डेमन के रूप में उपलब्ध है ।

ऐतिहासिक जवाब

सैंडर मारेचल के कोड का नमूना मूल से बेहतर है, जो मूल रूप से 2004 में पोस्ट किया गया था। मैंने एक बार पायरो के लिए एक डेमोनाइज़र का योगदान दिया था, लेकिन अगर मैं इसे करना चाहता था तो शायद सैंडर के कोड का उपयोग करूंगा।


72
संपादित करें: चूंकि मैंने मूल रूप से इस उत्तर को पोस्ट किया था, अब पीईपी 3143 का संदर्भ कार्यान्वयन उपलब्ध है: pypi.python.org/pypi/python-daemon
Jeff Bauer

@JeffBauer मूल लिंक की मृत्यु हो गई है, मुझे याद है कि यह उपयोगी होने के नाते, आप इसके लिए एक लाइव लिंक नहीं जान पाएंगे?
क्रेजीकैस्टा

1
@CrazyCasta: सैंडर मारेचल का संस्करण अभी भी वेकबैक मशीन
जेफ बाउर

1
@JeffBauer: सैंडर का कोड अब भी बेहतर है http://pypi.python.org/pypi/python-daemon। अधिक भरोसेमंद। बस एक उदाहरण: दो बार एक ही डेमॉन के साथ शुरू करने का प्रयास करें python-daemon: बड़ी बदसूरत त्रुटि। सैंडर के कोड के साथ: एक अच्छा नोटिस "डेमन पहले से ही चल रहा है।"
बसज १

2
चूंकि "अजगर-डेमॉन" मॉड्यूल प्रलेखन अभी भी गायब है (कई अन्य एसओ प्रश्न भी देखें) और बल्कि अस्पष्ट है (इस मॉड्यूल के साथ कमांड लाइन से एक डेमॉन को ठीक से कैसे शुरू / रोकें?), मैंने सैंडर मारेचल के कोड नमूने को जोड़ने के लिए संशोधित किया है? quit()विधि जो डेमॉन को रोकने से पहले निष्पादित हो जाती है। यही पर है।
बसज

163

एक अच्छी तरह से व्यवहार डेमन प्रक्रिया बनने के दौरान ध्यान रखने योग्य कई काल्पनिक बातें हैं :

  • कोर डंप को रोकें (कई डेमॉन रूट के रूप में चलते हैं, और कोर डंप में संवेदनशील जानकारी हो सकती है)

  • एक chrootगॉल के अंदर सही ढंग से व्यवहार करें

  • यूआईडी, जीआईडी, वर्किंग डायरेक्टरी, यूमास्क और अन्य प्रक्रिया मापदंडों को उचित रूप से उपयोग के मामले में सेट करें

  • त्याग suid, उत्थान , sgidविशेषाधिकार

  • उपयोग मामले के आधार पर बहिष्करण के साथ सभी खुले फ़ाइल विवरणों को बंद करें

  • ठीक से व्यवहार करता है, तो पहले से अलग संदर्भ के अंदर शुरू कर दिया, जैसे init, inetdआदि

  • समझदार डेमॉन व्यवहार के लिए सिग्नल हैंडलर सेट करें, लेकिन उपयोग के मामले द्वारा निर्धारित विशिष्ट हैंडलर के साथ भी

  • मानक धाराओं अनुप्रेषित stdin, stdout, stderrएक डेमॉन प्रक्रिया नहीं रह गया है एक नियंत्रित टर्मिनल है के बाद से

  • एक पीआईडी ​​फ़ाइल को एक सहकारी सलाहकार लॉक के रूप में संभालें, जो कि कई विरोधाभासी लेकिन व्यवहार करने के वैध तरीकों के साथ अपने आप में कीड़े का एक पूरा कर सकता है।

  • प्रक्रिया समाप्त होने पर उचित सफाई की अनुमति दें

  • वास्तव में अग्रणी के बिना एक डेमन प्रक्रिया बन जाती है लाश के है

इनमें से कुछ मानक हैं , जैसा कि कैनोनिकल यूनिक्स साहित्य ( UNIX पर्यावरण में उन्नत प्रोग्रामिंग , स्वर्गीय डब्ल्यू। रिचर्ड स्टीवंस, एडिसन-वेस्ले, 1992) द्वारा वर्णित है । अन्य, जैसे स्ट्रीम पुनर्निर्देशन और पीआईडी ​​फ़ाइल हैंडलिंग , पारंपरिक व्यवहार हैं जो अधिकांश डेमॉन उपयोगकर्ता उम्मीद करेंगे लेकिन वे कम मानकीकृत हैं।

ये सभी पीईपी 3143 "स्टैंडर्ड डेमन प्रोसेस लाइब्रेरी" विनिर्देश द्वारा कवर किए गए हैं । अजगर-डेमॉन संदर्भ कार्यान्वयन अजगर 2.7 पर काम करता है या बाद में, और अजगर 3.2 या बाद में।


26
"गॉल" को सही ढंग से लिखा गया है, क्योंकि इस तरह से डब्ल्यू। रिचर्ड स्टीवंस ने इसे वर्तनी दिया है
बोली

7
गॉल एक अंग्रेजी चीज है । पोस्टर ऑस्ट्रेलिया का है इसलिए इसका कोई मतलब नहीं है।
डिवाइन

1
एक py3k अनुकूल संस्करण बनाने पर कोई योजना?
टिम टिस्डाल

97

यहाँ मेरा मूल 'हाउडी वर्ल्ड' पायथन डेमॉन है जिसे मैं शुरू करता हूं, जब मैं एक नया डेमॉन एप्लिकेशन विकसित कर रहा हूं।

#!/usr/bin/python
import time
from daemon import runner

class App():
    def __init__(self):
        self.stdin_path = '/dev/null'
        self.stdout_path = '/dev/tty'
        self.stderr_path = '/dev/tty'
        self.pidfile_path =  '/tmp/foo.pid'
        self.pidfile_timeout = 5
    def run(self):
        while True:
            print("Howdy!  Gig'em!  Whoop!")
            time.sleep(10)

app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()

ध्यान दें कि आपको python-daemonपुस्तकालय की आवश्यकता होगी । आप इसे इसके द्वारा स्थापित कर सकते हैं:

pip install python-daemon

तो बस इसके साथ शुरू ./howdy.py startकरो, और इसके साथ बंद करो ./howdy.py stop


5
वह daemonमॉड्यूल जो आप आयात करते हैं, वह पायथन (अभी तक) का एक मानक हिस्सा नहीं है। इसे pip install python-daemonया इसके समतुल्य स्थापित करने की आवश्यकता है ।
रात्रि

6
मैंने आपके बताए अनुसार अजगर-डेमन को स्थापित किया, लेकिन जब मैं अपना ऐप चलाने की कोशिश करता हूं (आपकी अंतिम 3 पंक्तियों के अनुसार), तो मुझे आयात मिलता है: नाम धावक को आयात नहीं किया जा सकता
Nostradamnit

क्या आप जाँच सकते हैं कि क्या यह ठीक से स्थापित है? $ dpkg -L पायथन-डेमन | grep धावक /usr/share/pysared/daemon/runner.py
डस्टिन किर्कलैंड

4
यह सुझाव अप्रचलित प्रतीत होता है - सितंबर 2013 तक, वैसे भी, python.org/dev/peps/pep-3143 "रनर" का कोई उल्लेख नहीं करता है जिसे आयात किया जा सकता है। यह निश्चित रूप से @ नास्त्रेदमनीत के अवलोकन की व्याख्या करेगा।
offby1

2
यह अभी भी मेरे लिए ठीक काम करता है, सितंबर 2013 में, Ubuntu 13.04 पर, स्टॉक पायथन पैकेज, python2.7 और अजगर-डेमन के साथ स्थापित किया गया था। Python3 के साथ, हालाँकि, मुझे त्रुटि दिखाई देती है, "डेमॉन आयात धावक से आयात: कोई भी मॉड्यूल जिसका नाम 'डेमन' नहीं है
डस्टिन किर्कलैंड

42

अजगर-डेमन पर ध्यान दें पैकेज पर जो बॉक्स के बाहर डेमॉन के पीछे बहुत सारी समस्याओं को हल करता है।

अन्य विशेषताओं के बीच यह (डेबियन पैकेज विवरण से) सक्षम करता है:

  • प्रक्रिया को अपने स्वयं के प्रक्रिया समूह में अलग करें।
  • एक चुरोट के अंदर चलने के लिए उचित प्रक्रिया वातावरण सेट करें।
  • Suid और sgid विशेषाधिकारों का नवीनीकरण करें।
  • सभी खुले फ़ाइल विवरणों को बंद करें।
  • कार्य निर्देशिका, uid, gid और umask बदलें।
  • उपयुक्त सिग्नल हैंडलर सेट करें।
  • स्टड, स्टडआउट और स्टेडर के लिए नई फ़ाइल डिस्क्रिप्टर खोलें।
  • एक निर्दिष्ट PID लॉक फ़ाइल प्रबंधित करें।
  • बाहर निकलने के प्रसंस्करण के लिए सफाई कार्यों को पंजीकृत करें।

35

एक वैकल्पिक - बाहर से तो एक सामान्य, गैर daemonized अजगर कार्यक्रम बनाने का उपयोग कर इसे daemonize supervisord । यह बहुत सारे सिरदर्द बचा सकता है, और * निक्स- और भाषा-पोर्टेबल है।


1
मुझे लगता है कि यह सबसे अच्छा तरीका है। खासकर यदि आप एक ऑपरेटिंग सिस्टम पर कई डेमॉन चलाना चाहते हैं। कोड, पुन: उपयोग न करें।
गुत्थी

यह बहुत सारे मुद्दों को सरल करता है। मैंने सच्चे डेमॉन को लिखा है - वे आसान नहीं हैं।
क्रिस जॉनसन

1
सबसे अच्छा जवाब यहां छिपा है :)
kawing-chiu

1
यह सोना है। अजगर-डेमन के माध्यम से दौड़ने की कोशिश में घंटों बिताने के बाद, यह मेरे लिए काम करने वाले बॉक्स समाधान से बाहर है। महान प्रलेखन और उदाहरणों ने मेरे डेमॉन को कुछ मिनटों में ऊपर और ऊपर कर दिया।
निखिल साहू

17

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

[Unit]
Description=Python daemon
After=syslog.target
After=network.target

[Service]
Type=simple
User=<run as user>
Group=<run as group group>
ExecStart=/usr/bin/python <python script home>/script.py

# Give the script some time to startup
TimeoutSec=300

[Install]
WantedBy=multi-user.target

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

-या द्वारा


यह उचित और समझदार तरीका है। 1) आवश्यकताओं के /etc/systemd/system/control.service 2) कामयाब sudo बचाया जाsystemctl start control.service
jimper

7

YapDi एक अपेक्षाकृत नया अजगर मॉड्यूल है जो हैकर न्यूज़ में पॉप अप हुआ है। बहुत उपयोगी लगता है, स्क्रिप्ट के अंदर से एक अजगर स्क्रिप्ट को डेमन मोड में बदलने के लिए इस्तेमाल किया जा सकता है।


6

चूंकि अजगर-डेमॉन ने अभी तक अजगर 3.x का समर्थन नहीं किया है, और मेलिंग सूची पर क्या पढ़ा जा सकता है, यह कभी नहीं होगा, मैंने पीईपी 3143 का नया कार्यान्वयन लिखा है: pep3143daemon

pep3143daemon को कम से कम अजगर 2.6, 2.7 और 3.x का समर्थन करना चाहिए

इसमें एक PidFile वर्ग भी शामिल है।

पुस्तकालय केवल मानक पुस्तकालय और छह मॉड्यूल पर निर्भर करता है।

इसका उपयोग अजगर-डेमॉन के प्रतिस्थापन में एक बूंद के रूप में किया जा सकता है।

यहाँ प्रलेखन है


6

यह फ़ंक्शन किसी एप्लिकेशन को डेमॉन में बदल देगा:

import sys
import os

def daemonize():
    try:
        pid = os.fork()
        if pid > 0:
            # exit first parent
            sys.exit(0)
    except OSError as err:
        sys.stderr.write('_Fork #1 failed: {0}\n'.format(err))
        sys.exit(1)
    # decouple from parent environment
    os.chdir('/')
    os.setsid()
    os.umask(0)
    # do second fork
    try:
        pid = os.fork()
        if pid > 0:
            # exit from second parent
            sys.exit(0)
    except OSError as err:
        sys.stderr.write('_Fork #2 failed: {0}\n'.format(err))
        sys.exit(1)
    # redirect standard file descriptors
    sys.stdout.flush()
    sys.stderr.flush()
    si = open(os.devnull, 'r')
    so = open(os.devnull, 'w')
    se = open(os.devnull, 'w')
    os.dup2(si.fileno(), sys.stdin.fileno())
    os.dup2(so.fileno(), sys.stdout.fileno())
    os.dup2(se.fileno(), sys.stderr.fileno())

5

मुझे डर है कि @Dustin द्वारा बताए गए डेमन मॉड्यूल ने मेरे लिए काम नहीं किया। इसके बजाय मैंने अजगर-डेमन को स्थापित किया और निम्नलिखित कोड का उपयोग किया:

# filename myDaemon.py
import sys
import daemon
sys.path.append('/home/ubuntu/samplemodule') # till __init__.py
from samplemodule import moduleclass 

with daemon.DaemonContext():
    moduleclass.do_running() # I have do_running() function and whatever I was doing in __main__() in module.py I copied in it.

दौड़ना आसान है

> python myDaemon.py

यहां पूर्णता के लिए केवल नमूना निर्देशिका सामग्री है

>ls samplemodule
__init__.py __init__.pyc moduleclass.py

मॉड्यूलक्लाससोच की सामग्री हो सकती है

class moduleclass():
    ...

def do_running():
    m = moduleclass()
    # do whatever daemon is required to do.

2

एक और बात के बारे में सोचने के लिए जब अजगर में निंदा करना:

यदि आपका अजगर लॉगिंग का उपयोग कर रहा है और आप डोनेमिंग के बाद इसका उपयोग जारी रखना चाहते हैं, तो close()हैंडलर (विशेषकर फ़ाइल हैंडलर) पर कॉल करना सुनिश्चित करें ।

यदि आप ऐसा नहीं करते हैं तो हैंडलर अभी भी सोच सकता है कि इसमें फाइलें खुली हैं, और आपके संदेश बस गायब हो जाएंगे - दूसरे शब्दों में सुनिश्चित करें कि लकड़हारा जानता है कि उसकी फाइलें बंद हैं!

यह मान लेते हैं कि जब आप डैमेज करते हैं तो आप सभी खुली हुई फाइल डिस्क्रिप्टर को अंधाधुंध तरीके से बंद कर रहे हैं - इसके बजाय आप सभी को बंद करने की कोशिश कर सकते हैं, लेकिन लॉग फाइल (लेकिन यह आम तौर पर सभी को बंद करने के लिए सरल है जो आप चाहते हैं फिर से खोलें)।


क्या आपको लगता है कि एक नया लॉगिंग हैंडलर खोलना लॉगऑन हैंडलर को डेमन से गुजरने से बेहतर है कि उदाहरण के लिए DaemonContext के files_preserve विकल्प का उपयोग किया जाए?
हेवचैट्स

आप केवल लकड़हारा को बंद कर रहे हैं, आप एक नया निर्माण नहीं कर रहे हैं (यह बस इसे फिर से खोलना होगा जब इसे आवश्यकता होगी)। लेकिन भले ही ऐसा करना वास्तव में आसान है, लेकिन डेमोनकॉन्टेक्स का उपयोग करना बेहतर हो सकता है क्योंकि यह शायद कुछ अन्य चतुर चीजें कर रहा है (यह मानते हुए कि संरक्षण अभी भी उचित डीमोनाइजेशन की अनुमति देता है)।
मैथ्यू विलकोक्सन

2

यद्यपि आप अजगर-डेमॉन मॉड्यूल द्वारा प्रदान किए गए शुद्ध पायथन समाधान को पसंद कर सकते हैं, लेकिन इसमें एक daemon(3)फ़ंक्शन है libc- कम से कम, बीएसडी और लिनक्स पर - जो सही काम करेगा।

अजगर से कॉल करना आसान है:

import ctypes

ctypes.CDLL(None).daemon(0, 0) # Read the man-page for the arguments' meanings

केवल शेष कार्य PID फ़ाइल का निर्माण (और लॉक करना) है। लेकिन आप खुद को संभाल सकते हैं ...


1

मैंने सैंडर मारेचल के कोड नमूने में कुछ पंक्तियों को संशोधित किया (@JeffBauer द्वारा स्वीकार किए गए उत्तर में उल्लेख किया गया ) एक quit()विधि को जोड़ने के लिए जिसे डेमॉन को रोकने से पहले निष्पादित किया जाता है। यह कभी-कभी बहुत उपयोगी होता है।

यही पर है।

नोट: मैं "अजगर-डेमॉन" मॉड्यूल का उपयोग नहीं करता हूं क्योंकि प्रलेखन अभी भी गायब है (कई अन्य एसओ प्रश्न भी देखें) और बल्कि अस्पष्ट है (इस मॉड्यूल के साथ कमांड लाइन से एक डेमॉन को ठीक से कैसे शुरू / रोकें?)


-1

कुछ वर्षों और कई प्रयासों के बाद (मैंने यहां दिए गए सभी उत्तरों की कोशिश की, लेकिन उन सभी में अंत में मामूली कमियां थीं), अब मुझे एहसास हुआ कि पायथन से सीधे एक डेमॉन को शुरू करने, बंद करने, फिर से शुरू करने की तुलना में बेहतर तरीका है : इसके बजाय OS टूल का उपयोग करें।

उदाहरण के लिए, लिनक्स के लिए, करने के बजाय python myapp startऔर python myapp stop, मैं यह ऐप शुरू करने के लिए करता हूं:

screen -S myapp python myapp.py    
CTRL+A, D to detach

या इसे एक कमांड में शुरू करने और अलगscreen -dmS myapp python myapp.py करने के लिए

फिर:

screen -r myapp

फिर से इस टर्मिनल से जुड़ने के लिए। एक बार टर्मिनल में, इसे रोकने के लिए CTRL + C का उपयोग करना संभव है।


-2

पायथन के साथ डेमन बनाने का सबसे आसान तरीका ट्विस्टेड इवेंट-संचालित फ्रेमवर्क का उपयोग करना है । यह आपके लिए डीमॉनेटाइजेशन के लिए आवश्यक सभी सामान को संभालता है। यह समवर्ती अनुरोधों को संभालने के लिए रिएक्टर पैटर्न का उपयोग करता है ।


5
यह उपयोग करने के लिए बहुत बड़ा हथौड़ा है। ज्यादातर लोग सिर्फ एक छोटी पायथन स्क्रिप्ट चलाना चाहते हैं, जिसे उन्होंने एक डेमन के रूप में लिखा था। अजगर-डेमन, जैसा कि ऊपर वर्णित है, सही उत्तर है।
टॉम स्विरली

2
यद्यपि यह उत्तर काफी अभिमानी था, लेकिन यह उपयोगी था।
फिएटजैफ

-28

80% समय, जब लोग "डेमॉन" कहते हैं, वे केवल एक सर्वर चाहते हैं। चूंकि इस बिंदु पर सवाल पूरी तरह से स्पष्ट नहीं है, इसलिए यह कहना मुश्किल है कि उत्तर के संभावित डोमेन क्या हो सकते हैं। चूंकि एक सर्वर पर्याप्त है, वहां शुरू करें। यदि वास्तव में "डेमॉन" की आवश्यकता है (यह दुर्लभ है), तो nohupसर्वर को डीमॉनेटाइज़ करने के तरीके के रूप में पढ़ा जाता है।

ऐसे समय तक जब तक एक वास्तविक डेमॉन वास्तव में आवश्यक हो, बस एक साधारण सर्वर लिखें।

इसके अलावा देखो WSGI संदर्भ कार्यान्वयन।

इसके अलावा देखो सरल HTTP सर्वर

"क्या कोई अतिरिक्त चीजें हैं जिन पर विचार करने की आवश्यकता है?" हाँ। लगभग एक लाख बातें। क्या प्रोटोकॉल? कितने अनुरोध? कब तक प्रत्येक अनुरोध सेवा के लिए? कितनी बार पहुंचेंगे? क्या आप एक समर्पित प्रक्रिया का उपयोग करेंगे? धागे? Subprocesses? डेमन लिखना बहुत बड़ा काम है।


12
न तो उन पुस्तकालयों में से एक भी fork(), अकेले दो करते हैं। उनका डामरीकरण से कोई लेना-देना नहीं है।
ब्रैंडन रोड्स

8
यूनिक्स ऑपरेटिंग सिस्टम पर, एक "डेमॉन" प्रक्रिया - हवाई परिचारकों की तरह, जिसे यूनानियों ने "डेमोंस" कहा - एक है जो "पक्ष में खड़ा है।" सीधे उस उपयोगकर्ता के TTY के माध्यम से एक ही उपयोगकर्ता की सेवा करने के बजाय, एक डेमॉन कोई TTY के अंतर्गत आता है, लेकिन सिस्टम पर कई उपयोगकर्ताओं से अनुरोध जवाब कर सकते हैं, या - की तरह crondया syslogd- पूरे सिस्टम के लिए गृह व्यवस्था सेवाओं करता है। डेमॉन प्रक्रिया बनाने के लिए, किसी को कम से कम एक डबल-प्रदर्शन करना होगा, fork()जिसमें सभी फ़ाइल डिस्क्रिप्टर बंद हैं, ताकि सिस्टम कंसोल सहित सभी नियंत्रित टर्मिनलों से संकेतों के लिए प्रतिरक्षा हो। देखें बिग्नोज का जवाब
ब्रैंडन रोड्स

5
@ एसओटी - "एक सर्वर" बताता है कि एक प्रक्रिया क्या करती है (अपने कार्यों को शुरू करने के बजाय आने वाले अनुरोधों के लिए सुनती है); "एक डेमन" बताता है कि एक प्रक्रिया कैसे चलती है (एक खिड़की या एक नियंत्रित टर्मिनल के बिना)। SimpleHTTPServerवास्तव में एक सर्वर है, लेकिन वह जो मूल रूप से नहीं जानता कि खुद को कैसे निष्क्रिय किया जाए (आप इसे Ctrl-C कर सकते हैं, उदाहरण के लिए)। nohupएक भोली प्रक्रिया को निष्क्रिय करने के लिए एक उपयोगिता है - इसलिए आपका nohupped सर्वर वास्तव में डेमॉन और सर्वर दोनों है , जैसा कि आप दावा करते हैं। यह स्टैक ओवरफ्लो प्रश्न अनिवार्य रूप से पूछ रहा था: "मैं पायथन में कैसे लागू कर सकता हूं ?" nohup
ब्रैंडन रोड्स

5
हाँ, यह करता है, लेकिन ओपी के सवाल के बारे में मेरी समझ यह है कि वह अपने पायथन कार्यक्रम के भीतर से और कुछ और का उपयोग किए बिना डोनेशन करना चाहता है।
नौफल इब्राहिम

4
@ एस लोट - आपको प्रभावित होने की आवश्यकता नहीं है! हर दूसरे जवाब के लेखक को पता था कि "डेमॉन" का क्या मतलब है, इसलिए इस प्रश्न की व्याख्या करने की मेरी क्षमता शायद ही अनोखी है। :) और आपको यह विचार कहां से मिला कि मैं चाहता हूं कि लेखक एक पहिये का फिर से आविष्कार करे? मुझे लगता nohupहै कि यह एक अच्छा उपकरण है, और मैं अपने -1 वोट को हटा दूंगा यदि आप बस उस उपयोगी विचार को अपने वास्तविक उत्तर में ले जाते हैं। वास्तव में, यदि आप इसका उल्लेख करते हैं supervisordऔर यह भी कि यह लेखक को लॉगिंग, स्टार्ट-स्टॉप स्क्रिप्ट और थ्रॉटलिंग को पुनः आरंभ करने से बचाएगा, तो मैं आपको +1 भी करूंगा। :)
ब्रैंडन रोड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.