পাইথনে আপনি কীভাবে ডেমন তৈরি করবেন?


244

গুগলে অনুসন্ধান করলে এক্স 2 কোড স্নিপেটগুলি প্রকাশিত হয়। প্রথম ফলাফলটি এই কোডের রেসিপিটির, যার নীচে কিছু দরকারী আলোচনা সহ অনেকগুলি ডকুমেন্টেশন এবং ব্যাখ্যা রয়েছে।

তবে অন্য কোডের নমুনায় , এত বেশি ডকুমেন্টেশন না থাকাতে স্টার্ট, স্টপ এবং পুনরায় চালু করার মতো আদেশগুলি পাস করার জন্য নমুনা কোড অন্তর্ভুক্ত রয়েছে। এটি একটি পিআইডি ফাইলও তৈরি করে যা ডিমন ইতিমধ্যে চলমান আছে কিনা তা যাচাই করার পক্ষে কার্যকর হতে পারে etc.

এই নমুনাগুলি উভয়ই ডেমন তৈরির পদ্ধতি ব্যাখ্যা করে। এমন কি অতিরিক্ত কিছু বিষয় বিবেচনা করা দরকার? একটি নমুনা অন্য চেয়ে ভাল, এবং কেন?


1
আমি সর্বদা ডেমনাইজেশন কোডটি বিনাবিহীন অবস্থায় পেয়েছি। খালি কেন এটি করতে দেবে না?
emil.p.stanchev

17
কারণ এটি সেটিড বা সেটপগ্রিআর করে না।
bmargulies

4
সুপারভাইজার.অর্গ ব্যবহার করুন । এইভাবে আপনার কাঁটাচামচ করা () বা স্টিডিন / স্টডার পুনঃনির্দেশ করার দরকার নেই। শুধু একটি সাধারণ প্রোগ্রাম লিখুন।
guettli

উত্তর:


169

বর্তমান সমাধান

পিইপি 3143 (স্ট্যান্ডার্ড ডেমন প্রসেস লাইব্রেরি) এর একটি রেফারেন্স বাস্তবায়ন এখন পাইথন-ডেমন হিসাবে উপলভ্য ।

.তিহাসিক উত্তর

স্যান্ডার মেরেচালের কোডের নমুনাটি মূলটির চেয়ে উচ্চতর, যা মূলত 2004 সালে পোস্ট করা হয়েছিল I আমি একবার পাইরোর জন্য একটি ডেমোনাইজারকে অবদান রেখেছিলাম, তবে আমি যদি এটি করতেই পারি তবে স্যান্ডার কোডটি সম্ভবত ব্যবহার করতাম।


72
সম্পাদনা করুন: যেহেতু আমি প্রাথমিকভাবে এই উত্তরটি পোস্ট করেছি, এখন থেকে পিইপি 3143 এর একটি রেফারেন্স বাস্তবায়ন পাওয়া যাচ্ছে: pypi.python.org/pypi/python-daemon
জেফ বাউয়ার

@ জেফবাউরের মূল লিঙ্কটি মারা গেছে, আমি মনে করি এটি কার্যকর হয়েছে, আপনি কি তার জন্য কোনও লাইভ লিঙ্কটি জানবেন না?
ক্রেজিস্টাস্টা

1
@ ক্রজিস্টাস্টা: স্যান্ডার মেরেচালের সংস্করণটি ওয়েবব্যাক মেশিনে
জেফ বাউয়ার

1
@ জেফবাউয়ার: স্যান্ডারের কোডটি এখনও এর চেয়ে ভাল http://pypi.python.org/pypi/python-daemon। অধিক নির্ভরযোগ্য. একটি মাত্র উদাহরণ: একই কমন ডেমনটি দু'বার শুরু করার চেষ্টা করুন python-daemon: বড় কুৎসিত ত্রুটি। স্যান্ডারের কোড সহ: একটি দুর্দান্ত নোটিশ "ডেমোন ইতিমধ্যে চলছে"।
বসজ

2
যেহেতু "পাইথন-ডেমন" মডিউল ডকুমেন্টেশন এখনও অনুপস্থিত রয়েছে (আরও অনেক এসও প্রশ্ন দেখুন) এবং এটি অস্পষ্ট (এই মডিউলটির সাথে কমান্ড লাইন থেকে একটি ডেমন সঠিকভাবে কীভাবে শুরু / থামাতে হবে?), তাই আমি স্যান্ডার মেরেচালের কোড নমুনাটি যুক্ত করতে পরিবর্তন করেছি quit()ডেমন বন্ধ হওয়ার আগে কার্যকর হওয়া পদ্ধতি। এটা এখানে.
বাসজ

163

আছে অনেক fiddly জিনিষ যখন একটি হয়ে উঠছে যত্ন নিতে ভালভাবে ভদ্র ডেমন প্রক্রিয়া :

  • কোর ডাম্পগুলি প্রতিরোধ করুন (অনেকগুলি ডেমন মূল হিসাবে চালিত হয়, এবং কোর ডাম্প সংবেদনশীল তথ্য ধারণ করতে পারে)

  • chrootগোলের ভিতরে সঠিকভাবে আচরণ করুন

  • ইউআইডি, জিআইডি, ওয়ার্কিং ডিরেক্টরি, উমাস্ক এবং অন্যান্য প্রক্রিয়া পরামিতি যথাযথভাবে ব্যবহারের ক্ষেত্রে সেট করুন

  • উত্সাহ ত্যাগ suid, sgidঅধিকার

  • ব্যবহারের ক্ষেত্রে নির্ভর করে সমস্ত উন্মুক্ত ফাইল বর্ণনাকারী বন্ধ করুন

  • সঠিকভাবে আচরণ যদি কোনো ইতিমধ্যে আলাদা প্রসঙ্গ ভিতরে শুরু যেমন init, inetdইত্যাদি

  • বুদ্ধিমান ডেমন আচরণের জন্য সিগন্যাল হ্যান্ডলারগুলি সেট আপ করুন, তবে ব্যবহারের ক্ষেত্রে নির্ধারিত নির্দিষ্ট হ্যান্ডলারগুলির সাথেও

  • মান স্ট্রিম পুনর্নির্দেশ stdin, stdout, stderrএকটি ডেমন প্রক্রিয়া এখন আর নিয়ন্ত্রণকারী টার্মিনাল হয়েছে যেহেতু

  • একটি সমবায় পরামর্শক লক হিসাবে একটি পিআইডি ফাইল হ্যান্ডেল করুন, যা অনেকগুলি পরস্পরবিরোধী তবে আচরণের বৈধ উপায়গুলির সাথে নিজেই পোকার কৃমি হতে পারে is

  • প্রক্রিয়াটি সমাপ্ত হলে সঠিক পরিচ্ছন্নতার অনুমতি দিন

  • প্রকৃতপক্ষে জম্বিগুলির দিকে না গিয়ে ডেমোন প্রক্রিয়াতে পরিণত হয়

এর কয়েকটি মানিক , যেমন ইউনিক্স সাহিত্যে বর্ণিত ( ইউএনআইএক্স পরিবেশে অ্যাডভান্সড প্রোগ্রামিং , প্রয়াত ডব্লু। রিচার্ড স্টিভেনস, অ্যাডিসন-ওয়েসলি, 1992) দ্বারা বর্ণিত। যেমন প্রবাহ ফেরৎ এবং অন্যরা PID, ফাইল হ্যান্ডলিং হয় প্রচলিত আচরণ সবচেয়ে ডেমন ব্যবহারকারী আশা কিন্তু যে কম মান করছে।

এগুলি সমস্ত পিইপি 3143 "স্ট্যান্ডার্ড ডেমোন প্রসেস লাইব্রেরি" স্পেসিফিকেশন দ্বারা আচ্ছাদিত । পাইথন-ডেমন রেফারেন্স বাস্তবায়ন পাইথন 2.7 উপর কাজ করে বা পরে, এবং পাইথন 3.2 বা পরবর্তী।


26
"গওল" সঠিকভাবে বানান করা হয়েছে, কারণ ডাব্লু রিচার্ড স্টিভেন্স এটিকে বানানটি
লিখেছেন

7
গওল একটি ইংরেজি জিনিস । পোস্টারটি অস্ট্রেলিয়া থেকে তাই এটি বোধগম্য।
ডিভাইন dev

1
পাই 3 কে বন্ধুত্বপূর্ণ সংস্করণ তৈরির বিষয়ে কোনও পরিকল্পনা?
টিম টিসডাল

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 লাইনের সমান) তখন আমি আমদানি করি: নাম রানার আমদানি করতে পারি না
নস্ট্রাডামনিট

এটি সঠিকভাবে ইনস্টল করা হয়েছে কিনা তা পরীক্ষা করতে পারেন? $ dpkg -L পাইথন-ডেমন | গ্রেপ রানার / ওশর
ডাস্টিন কির্কল্যান্ড

4
এই পরামর্শটি অপ্রচলিত বলে মনে হচ্ছে - সেপ্টেম্বর ২০১৩ পর্যন্ত যাইহোক, পাইথন.আর / দেবদেব / পেপস / পেপ ৩৩৪৩3 আমদানি করা কোনও "রানার" এর কোনও উল্লেখ করেনি। এটি অবশ্যই @ নস্ট্রাডামনিটের পর্যবেক্ষণের ব্যাখ্যা দেবে।
অফবি 1

2
এটি এখনও আমার জন্য উবুন্টু ১৩.০৪-তে, স্টক পাইথন প্যাকেজস, পাইথন ২..7 এবং পাইথন-ডেমন ইনস্টল করে আমার পক্ষে ঠিক কাজ করে। পাইথন 3 দিয়ে তবে আমি ত্রুটি দেখতে পাচ্ছি, "ডেমন আমদানি রানার আমদানি থেকে: 'ডেমন' নামে কোনও মডিউল নেই"
ডাস্টিন কির্কল্যান্ড

42

পাইথন-ডেমন প্যাকেজটি নোট করুন যা বাক্সের বাইরে ডেমনগুলির পিছনে প্রচুর সমস্যা সমাধান করে।

অন্যান্য বৈশিষ্ট্যগুলির মধ্যে এটি সক্ষম করে (ডেবিয়ান প্যাকেজ বিবরণ থেকে):

  • প্রক্রিয়াটি তার নিজস্ব প্রক্রিয়া গোষ্ঠীতে আলাদা করুন।
  • ক্রোটের অভ্যন্তরে চলার জন্য উপযুক্ত প্রক্রিয়া পরিবেশ সেট করুন।
  • মামলা এবং স্যাজিড সুবিধাগুলি বাতিল করুন Ren
  • সমস্ত উন্মুক্ত ফাইল বর্ণনাকারী বন্ধ করুন।
  • ওয়ার্কিং ডিরেক্টরি, ইউআইডি, গিড এবং উমাস্ক পরিবর্তন করুন।
  • উপযুক্ত সিগন্যাল হ্যান্ডলার সেট করুন।
  • Stdin, stdout এবং stderr এর জন্য নতুন ফাইল বর্ণনাকারী খুলুন।
  • একটি নির্দিষ্ট পিআইডি লক ফাইল পরিচালনা করুন।
  • প্রস্থান প্রক্রিয়াকরণের জন্য ক্লিনআপ ফাংশন নিবন্ধন করুন।

35

একটি বিকল্প - একটি সাধারণ, অ-ডেমনাইজড পাইথন প্রোগ্রাম তৈরি করুন তারপরে সুপারভাইজার ব্যবহার করে বাহ্যিকভাবে এটি ডিমনাইজ করুন । এটি প্রচুর মাথাব্যাথা বাঁচাতে পারে এবং এটি * নিক্স- এবং ভাষা-বহনযোগ্য।


1
আমি মনে করি এটি সেরা উপায়। বিশেষত যদি আপনি একটি অপারেটিং সিস্টেমে বেশ কয়েকটি ডিমন চালাতে চান। কোড করবেন না, পুনরায় ব্যবহার করুন।
guettli

এটি অনেকগুলি বিষয়কে সরল করে তোলে। আমি সত্য ডিমেন লিখেছি - এগুলি সহজ নয়।
ক্রিস জনসন

1
সেরা উত্তরটি এখানে লুকিয়ে রয়েছে :)
কাওয়িং-চিউ

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

আমি এই পদ্ধতিটি পছন্দ করি কারণ আপনার জন্য প্রচুর কাজ হয়ে যায় এবং তারপরে আপনার ডেমন স্ক্রিপ্টটি আপনার সিস্টেমের বাকী অংশের মতোই আচরণ করে।

-অথবা দ্বারা


এটি সঠিক এবং বুদ্ধিমান উপায় way 1) /etc/systemd/system/control.service এ সংরক্ষণ করা দরকার 2) পরিচালিত সুডোsystemctl start control.service
জিম্পার

7

ইয়াপডি একটি অপেক্ষাকৃত নতুন পাইথন মডিউল যা হ্যাকার নিউজে প্রকাশিত হয়েছিল। দেখতে বেশ কার্যকর মনে হচ্ছে, স্ক্রিপ্টের ভিতর থেকে পাইথন স্ক্রিপ্টটি ডেমন মোডে রূপান্তর করতে ব্যবহার করা যেতে পারে।


6

পাইথন-ডেমন যেহেতু পাইথন 3.x সমর্থন করে না এবং মেলিং তালিকায় যা পড়তে পারে তা থেকে কখনই এটি হতে পারে না, আমি পিইপি 3143 এর একটি নতুন বাস্তবায়ন লিখেছি: পেইপি 14143 ডিমন

pep3143 ডিমন কমপক্ষে পাইথন 2.6, 2.7 এবং 3.x সমর্থন করা উচিত

এটিতে একটি পিডফিল ক্লাস রয়েছে।

লাইব্রেরিটি কেবলমাত্র মানক গ্রন্থাগার এবং ছয়টি মডিউলের উপর নির্ভর করে।

পাইথন-ডেমনের প্রতিস্থাপনের ড্রপ হিসাবে এটি ব্যবহার করা যেতে পারে।

এখানে ডকুমেন্টেশন দেওয়া আছে


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

আমি ভয় করি @ ডাস্টিন দ্বারা উল্লিখিত ডিমন মডিউলটি আমার পক্ষে কাজ করে নি। পরিবর্তে আমি পাইথন-ডেমন ইনস্টল করেছি এবং নিম্নলিখিত কোডটি ব্যবহার করেছি:

# 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

Moduleclass.py এর সামগ্রী হতে পারে

class moduleclass():
    ...

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

2

অজগর থেকে ডেমনোজাইজ করার সময় আরও একটি বিষয় চিন্তা করতে হবে:

যদি আপনি পাইথন লগিং ব্যবহার করছেন এবং আপনি ডিমনাইজিংয়ের পরে এটি ব্যবহার চালিয়ে যেতে চান, close()তবে হ্যান্ডলারের (বিশেষত ফাইল হ্যান্ডলারগুলি) কল করতে ভুলবেন না ।

আপনি যদি এটি না করেন তবে হ্যান্ডলারটি এখনও মনে করতে পারে যে এতে ফাইলগুলি খোলা আছে, এবং আপনার বার্তাগুলি কেবল অদৃশ্য হয়ে যাবে - অন্য কথায় নিশ্চিত করুন যে লগার জানেন যে এর ফাইলগুলি বন্ধ রয়েছে!

এটি অনুমান করে যখন আপনি নির্বিচারে সমস্ত খোলার ফাইল বর্ণনাকারী বন্ধ করে দিচ্ছেন - পরিবর্তে আপনি লগ ফাইল ব্যতীত সমস্তগুলি বন্ধ করার চেষ্টা করতে পারেন (তবে সবগুলি বন্ধ করার পরে আপনি যা চান তা আবার খোলা রাখা সহজ)।


আপনি কি মনে করেন উদাহরণস্বরূপ ডেমনকন্টেক্সট এর ফাইল_প্রিজার বিকল্পটি ব্যবহার করে একটি নতুন লগিং হ্যান্ডলারটি ডেমনে প্রবেশের চেয়ে লগিং হ্যান্ডলারটি উত্তোলন করা ভাল?
আরেওয়াচটি

আপনি কেবল লগারটি বন্ধ করছেন, আপনি একটি নতুন তৈরি করছেন না (এটি প্রয়োজন হলে এটি পুনরায় খুলবে)। এটি করা সহজ হলেও এটি ডিমন কনটেক্সটটি ব্যবহার করা আরও ভাল কারণ এটি সম্ভবত কিছু অন্যান্য চালাক কাজ করছে (ধরে নেওয়াও যে সংরক্ষণটি সঠিকভাবে ডেমোনাইজেশনের অনুমতি দেয়)।
ম্যাথু উইলকক্সসন

2

যদিও আপনি পাইথন-ডেমন মডিউল দ্বারা সরবরাহিত খাঁটি পাইথন সমাধানটিকে পছন্দ করতে পারেন, তবে বিএসডি এবং লিনাক্স- এ অন্তত একটি daemon(3)ফাংশন রয়েছে যা সঠিক কাজ করবে।libc

অজগর থেকে এটি কল করা সহজ:

import ctypes

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

করণীয় কেবলমাত্র পিআইডি-ফাইল তৈরি করা (এবং লক করা)। তবে আপনি নিজেকে পরিচালনা করতে পারেন ...


1

ডিমন বন্ধ হওয়ার আগে মৃত্যুদন্ড কার্যকর হওয়ার আগে এমন একটি পদ্ধতি যুক্ত করতে আমি স্যান্ডার মেরেচালের কোড নমুনায় ( গ্রহণযোগ্য উত্তরে @ জেফবাউয়ার উল্লেখ করেছেন ) কয়েকটি লাইন সংশোধন করেছি quit()। এটি কখনও কখনও খুব দরকারী।

এটা এখানে.

দ্রষ্টব্য: আমি "পাইথন-ডেমন" মডিউলটি ব্যবহার করি না কারণ ডকুমেন্টেশনটি এখনও অনুপস্থিত (আরও অনেক এসও প্রশ্ন দেখুন) এবং এটি অস্পষ্ট (এই মডিউলের সাথে কমান্ড লাইন থেকে একটি ডেমন সঠিকভাবে কীভাবে শুরু / থামাতে হবে?)


-1

কয়েক বছর এবং অনেক চেষ্টার পরে (আমি এখানে প্রদত্ত সমস্ত উত্তর চেষ্টা করেছিলাম, তবে তাদের সবার শেষে ছোটখাট ঘাটতি ছিল), এখন আমি বুঝতে পেরেছি যে পাইথন থেকে সরাসরি একটি ডেমন শুরু করা, থামানো, পুনরায় চালু করার চেয়ে আরও ভাল উপায় আছে : পরিবর্তে ওএস সরঞ্জাম ব্যবহার করুন।

উদাহরণস্বরূপ, লিনাক্সের জন্য, না করে 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সার্ভারকে ডেমনাইজ করার উপায় হিসাবে পড়ুন ।

প্রকৃত ডেমন হিসাবে যেমন সময় প্রয়োজন না হওয়া পর্যন্ত কেবল একটি সাধারণ সার্ভার লিখুন write

এছাড়াও তাকান WSGI রেফারেন্স বাস্তবায়ন।

এছাড়াও তাকান সরল HTTP সার্ভার

"অতিরিক্ত কোনও বিষয় যা বিবেচনা করা দরকার?" হ্যাঁ। প্রায় এক মিলিয়ন জিনিস। কি প্রোটোকল? কয়টি অনুরোধ? প্রতিটি অনুরোধ পরিষেবা কত দিন? তারা কত ঘন ঘন আসবে? আপনি একটি ডেডিকেটেড প্রক্রিয়া ব্যবহার করবেন? টপিক? Subprocesses? ডেমন লেখা বড় কাজ।


12
এই লাইব্রেরিগুলির একটিও এমনকি একটিও করে না fork(), দুটি ছেড়ে দেওয়া হোক। ডেমোনাইজেশনের সাথে তাদের কোনও যোগসূত্র নেই।
ব্র্যান্ডন রোডস

8
ইউনিক্স অপারেটিং সিস্টেমগুলিতে গ্রীকরা "ডেমনস" নামে পরিচিত বায়বীয় পরিচারকের মতো একটি "ডেমন" প্রক্রিয়াটি "পাশে দাঁড়ায়" is সেই ব্যবহারকারীর টিটিওয়াইয়ের মাধ্যমে সরাসরি কোনও একক ব্যবহারকারীকে পরিবেশন করার পরিবর্তে ডেমনটি কোনও টিটিওয়াইয়ের অন্তর্ভুক্ত নয়, তবে সিস্টেমের অনেক ব্যবহারকারীর অনুরোধের উত্তর দিতে পারে, বা - যেমন crondবা syslogd- পুরো সিস্টেমের জন্য গৃহকর্মী পরিষেবা দেয়। ডেমন প্রক্রিয়া তৈরি করতে, একটি fork()ফাইলকে কমপক্ষে একটি ডাবল সম্পাদন করতে হবে - সমস্ত ফাইল বর্ণনাকারী বন্ধ রয়েছে, যাতে সিস্টেম কনসোল সহ সমস্ত নিয়ন্ত্রণকারী টার্মিনালগুলি থেকে সংকেতগুলির মধ্যে অনাক্রম্যতা থাকে। বিগনোজ এর উত্তর দেখুন।
ব্র্যান্ডন রোডস

5
@ এস লট - "একটি সার্ভার" কোনও প্রক্রিয়া কী করে তা বর্ণনা করে (নিজস্ব ক্রিয়াকলাপ শুরু করার পরিবর্তে আগত অনুরোধগুলির জন্য কান দেয়); "একটি ডেমন" বর্ণনা করে যে কীভাবে একটি প্রক্রিয়া চলে (উইন্ডো বা একটি নিয়ন্ত্রণকারী টার্মিনাল ছাড়া)। SimpleHTTPServerপ্রকৃতপক্ষে একটি সার্ভার, তবে এমন একটি যা স্থানীয়ভাবে কীভাবে নিজেকে ডেমোনাইজ করতে হয় তা জানে না (উদাহরণস্বরূপ আপনি এটি Ctrl-C করতে পারেন)। nohupএকটি নিষ্পাপ প্রক্রিয়াটি ডেমোনাইজ করার জন্য একটি ইউটিলিটি - সুতরাং আপনার দাবী করা সার্ভারটি সত্যই আপনার দাবি অনুসারে একটি ডেমন এবং সার্ভার উভয়ই । এই স্ট্যাক ওভারফ্লো প্রশ্নটি মূলত জিজ্ঞাসা করছিল: "আমি কীভাবে পাইথনটিতে প্রয়োগ করতে পারি ?" nohup
ব্র্যান্ডন রোডস

5
হ্যাঁ এটি করে তবে ওপিএস প্রশ্নের আমার বোধগম্যতা হ'ল তিনি তার অজগর প্রোগ্রামের মধ্যে থেকে এবং অন্য কিছু ব্যবহার না করে ডিমনোসেশনটি করতে চান।
নওফাল ইব্রাহিম

4
@ এস লট - আপনার মুগ্ধ হওয়ার দরকার নেই! অন্য প্রতিটি উত্তরের লেখক জানতেন যে "ডেমন" বলতে কী বোঝায় তাই আমার এই প্রশ্নটি ব্যাখ্যা করার ক্ষমতা খুব কমই অনন্য। :) এবং আপনি এই ধারণাটি কোথায় পেয়েছেন যে আমি চাই যে লেখক একটি চক্র পুনরায় উদ্ভাবন করতে চান? আমি মনে করি nohupএটি একটি দুর্দান্ত সরঞ্জাম এবং যদি আপনি সেই কার্যকর ধারণাটি কেবল আপনার প্রকৃত উত্তরের দিকে সরিয়ে নেন তবে আমি আমার -1 ভোট সরিয়ে ফেলব। প্রকৃতপক্ষে, যদি আপনি উল্লেখ করেন supervisordএবং এটি কীভাবে লেখককে লগিং, একটি স্টার্ট-স্টপ স্ক্রিপ্ট এবং থ্রোটলিং পুনরায় আরম্ভ করা থেকে বাঁচায়, তবে আমি আপনাকে আরও +1 করব। :)
ব্র্যান্ডন রোডস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.