मैं एक डेमोनाइज़र चाहूंगा जो एक अनियंत्रित, सामान्य स्क्रिप्ट या कमांड को डेमॉन में बदल सकता है ।
दो सामान्य मामले हैं जिनसे मैं निपटना चाहूंगा:
मेरे पास एक स्क्रिप्ट है जो हमेशा के लिए चलनी चाहिए। यदि यह कभी भी (या रिबूट पर) मर जाता है, तो इसे पुनरारंभ करें। ऐसा न हो कि एक साथ दो प्रतियाँ चल रही हों (पता लगाएँ कि क्या कोई प्रति पहले से चल रही है और उस स्थिति में उसे लॉन्च न करें)।
मेरे पास एक सरल स्क्रिप्ट या कमांड लाइन कमांड है जिसे मैं हमेशा के लिए बार-बार निष्पादित करना चाहता हूं (रन के बीच एक छोटा विराम के साथ)। दोबारा, स्क्रिप्ट की दो प्रतियों को कभी भी एक साथ चलाने की अनुमति न दें।
बेशक, यह 2 मामले में स्क्रिप्ट के चारों ओर "जबकि (सच)" लूप लिखने के लिए तुच्छ है और फिर केस 1 के लिए एक समाधान लागू करें, लेकिन एक अधिक सामान्य समाधान केस 2 को सीधे हल करेगा क्योंकि स्क्रिप्ट 1 में लागू होती है अच्छी तरह से (आप सिर्फ एक छोटा या कोई विराम चाहते हैं यदि स्क्रिप्ट का उद्देश्य कभी भी मरना नहीं है (निश्चित रूप से यदि स्क्रिप्ट वास्तव में कभी नहीं मरती है तो विराम वास्तव में कोई फर्क नहीं पड़ता))।
ध्यान दें कि मौजूदा स्क्रिप्ट में फ़ाइल-लॉकिंग कोड या पीआईडी रिकॉर्डिंग को शामिल करते हुए समाधान को शामिल नहीं करना चाहिए।
अधिक विशेष रूप से, मैं एक कार्यक्रम "डेमनीज़" चाहूंगा जिसे मैं पसंद कर सकता हूं
% daemonize myscript arg1 arg2
या, उदाहरण के लिए,
% daemonize 'echo `date` >> /tmp/times.txt'
जो दिनांक की बढ़ती सूची को बनाए रखेगा। (ध्यान दें कि यदि तर्क करने के लिए तर्क एक स्क्रिप्ट है जो हमेशा के मामले में 1 से ऊपर के रूप में चलता है, तो फिर भी सही काम करना होगा, आवश्यक होने पर इसे फिर से शुरू करना।) फिर मैं अपने .login में ऊपर की तरह एक कमांड डाल सकता हूं। और / या क्रोन इसे प्रति घंटा या सूक्ष्म रूप से (इस बात पर निर्भर करता है कि मैं इसके बारे में चिंतित कैसे अप्रत्याशित रूप से मर रहा था)।
NB: डेमनीज स्क्रिप्ट को कमांड स्ट्रिंग को याद रखने की आवश्यकता होगी, यह डेमॉनेटाइजिंग है ताकि यदि उसी कमांड स्ट्रिंग को फिर से डेमनीफाई किया जाए तो यह दूसरी कॉपी लॉन्च नहीं करता है।
इसके अलावा, समाधान को आदर्श रूप से ओएस एक्स और लिनक्स दोनों पर काम करना चाहिए लेकिन एक या दूसरे के लिए समाधान का स्वागत है।
संपादित करें: यह ठीक है अगर आपको इसे लागू करना है sudo daemonize myscript myargs
।
(अगर मैं यह सब गलत सोच रहा हूं या त्वरित और गंदे आंशिक समाधान हैं, तो मुझे भी यह सुनना अच्छा लगेगा।)
पुनश्च: मामले में यह उपयोगी है, यहाँ अजगर के लिए एक समान प्रश्न है।
और यह एक ऐसी ही सवाल का जवाब क्या एक मनमाना स्क्रिप्ट की एक त्वरित और गंदा चित्रण इस के लिए एक उपयोगी मुहावरा हो गया लगता है है: