Erlang 21

erlsrv




erlang

erlsrv

आदेश

erlsrv

कमांड सारांश

विंडोज पर एक सेवा के रूप में एरलांग एमुलेटर चलाएं

विवरण

यह उपयोगिता Windows NT / 2000 / XP (और बाद के संस्करणों के लिए Windows) के लिए विशिष्ट है। यह विंडोज सिस्टम पर सेवाओं के रूप में चलाने के लिए एर्लैंग एमुलेटर की अनुमति देता है, एम्बेडेड सिस्टम को किसी भी उपयोगकर्ता को लॉग ऑन करने की आवश्यकता के बिना शुरू करने की अनुमति देता है। इस तरह से शुरू किए गए एमुलेटर को अन्य सेवाओं के समान विंडोज सेवाओं के एपलेट के माध्यम से हेरफेर किया जा सकता है।

सूचना है कि erlsrv विंडोज के लिए एक सामान्य सेवा उपयोगिता नहीं है, लेकिन एम्बेडेड Erlang सिस्टम के लिए डिज़ाइन किया गया है।

erlsrv पंजीकरण करने, बदलने, शुरू करने और सेवाओं को रोकने के लिए एक कमांड-लाइन इंटरफ़ेस भी प्रदान करता है।

सेवाओं में हेरफेर करने के लिए, उपयोगकर्ता पर लॉग इन मशीन पर व्यवस्थापक विशेषाधिकार है। Erlang मशीन स्वयं (डिफ़ॉल्ट) स्थानीय व्यवस्थापक के रूप में चलती है। इसे विंडोज में सर्विसेज एप्लेट के साथ बदला जा सकता है।

सेवा द्वारा बनाई गई प्रक्रियाएं, सामान्य सेवाओं के विपरीत, कार्य प्रबंधक के साथ "मार" हो सकती हैं। एक एमुलेटर को मारना जो एक सेवा द्वारा शुरू किया जाता है, उस सेवा के लिए निर्दिष्ट "ऑनफेल" कार्रवाई को ट्रिगर करता है, जो एक रिबूट हो सकता है।

निम्नलिखित मापदंडों को प्रत्येक एरलंग सेवा के लिए निर्दिष्ट किया जा सकता है:

StopAction

erlsrv एमुलेटर को रोकने के लिए erlsrv बताता है। डिफ़ॉल्ट इसे मारने के लिए है (Win32 TerminateProcess), लेकिन यह क्रिया किसी भी Erlang शेल कमांड को निर्दिष्ट कर सकती है जिसे एमुलेटर में निष्पादित किया जाएगा ताकि यह बंद हो जाए। कमांड को शेल में जारी किए जाने के 30 सेकंड के भीतर बंद होने की उम्मीद है। यदि एमुलेटर को बंद नहीं किया जाता है, तो यह सेवा प्रबंधक को एक रनिंग स्थिति की रिपोर्ट करता है।

OnFail

निम्नलिखित में से एक हो सकता है:

reboot

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

restart

एर्लैंग एमुलेटर को फिर से चालू किया जाता है (इस अवसर पर सेवा के लिए जो भी पैरामीटर पंजीकृत हैं) जब यह बंद हो जाता है। यदि एमुलेटर 10 सेकंड के भीतर फिर से बंद हो जाता है, तो इसे अनंत लूप से बचने के लिए पुनरारंभ नहीं किया जाता है, जो विंडोज सिस्टम को लटका सकता है।

restart_always

restart समान, लेकिन चक्रीय पुनरारंभ का पता लगाने की कोशिश नहीं करता; यह उम्मीद की जाती है कि समस्या से बचने के लिए कुछ अन्य तंत्र मौजूद हैं।

ignore (डिफ़ॉल्ट)

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

ऐसी प्रणाली पर जहां रिलीज हैंडलिंग का उपयोग किया जाता है, इसे हमेशा ignore करने के लिए सेट किया जाता है। इसके बजाय विफलता पर सेवा को पुनरारंभ करने के लिए heart का उपयोग करें।

Machine

एरलांग एमुलेटर का स्थान। डिफ़ॉल्ट erl.exe के समान निर्देशिका में स्थित erlsrv.exe werl.exe को इस एमुलेटर के रूप में निर्दिष्ट न करें, यह काम नहीं करेगा।

यदि सिस्टम रिलीज़ हैंडलिंग का उपयोग करता है, तो इसे start_erl.exe समान प्रोग्राम पर सेट किया start_erl.exe

Env

एमुलेटर के लिए एक अतिरिक्त वातावरण निर्दिष्ट करता है। यहां निर्दिष्ट पर्यावरण चर को सिस्टम-वाइड एन्वायर्नमेंट ब्लॉक में जोड़ा जाता है जो सेवा शुरू होने पर सामान्य रूप से मौजूद होता है। सिस्टम-वाइड वातावरण और सेवा परिवेश विनिर्देश दोनों में मौजूद चर को सेवा में निर्दिष्ट मान पर सेट किया जाएगा।

WorkDir

Erlang एमुलेटर के लिए काम करने वाली निर्देशिका। स्थानीय ड्राइव पर होना चाहिए (जब कोई सेवा शुरू होती है तो कोई नेटवर्क ड्राइव माउंट नहीं किया जाता है)। सेवाओं के लिए डिफ़ॉल्ट कार्यशील निर्देशिका %SystemDrive%%SystemPath% । डिबग लॉग फ़ाइलों को इस निर्देशिका में रखा जाएगा।

Priority

एमुलेटर की प्रक्रिया प्राथमिकता। निम्नलिखित में से एक हो सकता है:

realtime

अनुशंसित नहीं है, क्योंकि मशीन संभवतः इंटरैक्टिव उपयोगकर्ताओं के लिए दुर्गम होगी।

high

इस्तेमाल किया जा सकता है अगर दो एर्लैंग नोड्स एक समर्पित प्रणाली पर रहते हैं और एक को दूसरे पर पूर्ववर्ती होना है।

low

उपयोग किया जा सकता है अगर इंटरैक्टिव प्रदर्शन एमुलेटर प्रक्रिया से प्रभावित नहीं होना है।

default > डिफ़ॉल्ट>
SName or Name

Erlang एमुलेटर का छोटा या लंबा नोड नाम निर्दिष्ट करता है। Erlang सेवाओं को हमेशा वितरित किया जाता है। डिफ़ॉल्ट सेवा नाम का उपयोग (संक्षिप्त) नोडेनम के रूप में करना है।

DebugType

निर्दिष्ट करता है कि एरलैंग शेल से आउटपुट को "डिबग लॉग" में भेजा जाना है। लॉग फ़ाइल का नाम <servicename> .debug या <servicename> .debug. <N>, जहां <N> 99 के माध्यम से 1 से पूर्णांक है। लॉग फ़ाइल को सेवा की कार्यशील निर्देशिका ( WorkDir में निर्दिष्ट के रूप में) में WorkDir

निम्नलिखित में से एक हो सकता है:

new

सेवा के हर मंगलाचरण के लिए एक अलग लॉग फ़ाइल का उपयोग करता है (<servicename> .debug. <N>)।

reuse

समान लॉग फ़ाइल (<servicename> .debug ) का .debug : उपयोग करता है।

console

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

none (डिफ़ॉल्ट)

Erlang खोल का उत्पादन छोड़ दिया गया है।

ध्यान दें

console विकल्प उत्पादन के लिए अभिप्रेत नहीं है । यह विकास के दौरान Erlang सेवाओं को डीबग करने का केवल एक सुविधाजनक तरीका है।

उत्पादन प्रणाली में new और reuse विकल्प सुविधाजनक लग सकते हैं, लेकिन विचार करें कि सिस्टम के जीवनकाल के दौरान लॉग अनिश्चित काल तक बढ़ते हैं और सेवा को फिर से शुरू करने के अलावा, छंटनी नहीं की जा सकती है।

संक्षेप में, DebugType केवल डीबगिंग के लिए अभिप्रेत है। उत्पादन के दौरान लॉग मानक Erlang लॉगिंग सुविधाओं के साथ बेहतर उत्पादन किया जाता है।

Args

एमुलेटर स्टार्टअप प्रोग्राम erl.exe (या start_erl.exe ) के लिए अतिरिक्त तर्क देता है। जो तर्क यहाँ निर्दिष्ट नहीं किए जा सकते हैं, वे हैं -noinput ( StopActions काम नहीं करेगा), -name और -sname (वे किसी भी तरह से निर्दिष्ट हैं)। सबसे आम उपयोग कुकीज़ और झंडे को init:boot() -s पारित करने के लिए निर्दिष्ट करने के लिए है।

InternalServiceName

Windows- आंतरिक सेवा नाम निर्दिष्ट करता है (प्रदर्शन नाम नहीं, जो सेवा की पहचान करने के लिए उपयोग किया जाने वाला एक erlsrv )।

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

आंतरिक सेवा का नाम विंडोज सेवा प्रबंधक में देखा जा सकता है अगर एक अर्लंग सेवा के लिए Properties

Comment

सेवा का वर्णन करने वाला एक पाठ। अनिवार्य नहीं है, लेकिन विंडोज सेवा प्रबंधक में सेवा विवरण के रूप में दिखाई देता है।

रिलीज़ हैंडलिंग का उपयोग करने वाली प्रणाली में सेवा का नामकरण कन्वेंशन NodeName _ रिलीज़ का पालन करना चाहिए, जहाँ NodeName Erlang नोड नाम का पहला भाग है (अप करने के लिए, लेकिन "@" सहित शामिल नहीं है) और रिलीज़ वर्तमान रिलीज़ है आवेदन पत्र।

निर्यात

erlsrv {सेट | जोड़ें} <सेवा-नाम> [<सेवा विकल्प>]

set और add क्रमशः एक अर्लंग सेवा को संशोधित या जोड़ता है। add कमांड का सबसे सरल रूप बिना किसी विकल्प के होता है जिस स्थिति में सभी डिफ़ॉल्ट मान (ऊपर वर्णित) लागू होते हैं। सेवा नाम अनिवार्य है।

हर विकल्प को मापदंडों के बिना निर्दिष्ट किया जा सकता है, फिर डिफ़ॉल्ट मान लागू किया जाता है। विकल्पों का मान केवल तभी दिया जाता है जब डिफ़ॉल्ट का उपयोग नहीं किया जाना है। उदाहरण के लिए, erlsrv set myservice -prio -arg डिफ़ॉल्ट प्राथमिकता सेट करता है और सभी तर्कों को हटा देता है।

सेवा विकल्प:

-st[opaction] [<erlang shell command>]

StopAction परिभाषित करता है, सेवा बंद होने पर StopAction खोल को दी गई कमांड। डिफ़ॉल्ट कोई नहीं है।

-on[fail] [{reboot | restart | restart_always}]

Erlang एमुलेटर अप्रत्याशित रूप से बंद हो जाता है जब कार्रवाई करने के लिए। डिफ़ॉल्ट को अनदेखा करना है।

-m[achine] [<erl-command>]

एरलांग एमुलेटर का पूरा रास्ता। इसके लिए कभी भी werl प्रोग्राम का उपयोग न करें। erl.exe के समान ही निर्देशिका में erlsrv.exe । जब रिलीज़ हैंडलिंग का उपयोग किया जाता है, तो इसे start_erl.exe समान प्रोग्राम पर सेट किया start_erl.exe

-e[nv] [<variable>[=<value>]] ...

सेवा के लिए पर्यावरण ब्लॉक को संपादित करता है। निर्दिष्ट प्रत्येक पर्यावरण चर को सिस्टम पर्यावरण ब्लॉक में जोड़ा जाता है। यदि यहाँ निर्दिष्ट एक चर का नाम सिस्टम-वाइड वातावरण चर के समान है, तो निर्दिष्ट मान सिस्टम-वाइड को ओवरराइड करता है। इस चर में पर्यावरण चर को <चर> = <मान> निर्दिष्ट करके जोड़ा जाता है और सूची से हटाकर <चर> को अकेला निर्दिष्ट किया जाता है। पर्यावरण ब्लॉक स्वचालित रूप से हल किया जाता है। किसी भी संख्या के -env विकल्प एक कमांड में निर्दिष्ट किए जा सकते हैं। डिफॉल्ट सिस्टम एनवायरनमेंट ब्लॉक को अनमॉडिफ़ाइड (दो अतिरिक्त को छोड़कर, नीचे अनुभाग Environment देखें) का उपयोग करना है।

-w[orkdir] [<directory>]

Erlang एमुलेटर की प्रारंभिक कार्यशील निर्देशिका। सिस्टम निर्देशिका में डिफ़ॉल्ट।

-p[riority] [{low|high|realtime}]

एरलंग एमुलेटर की प्राथमिकता। Windows डिफ़ॉल्ट प्राथमिकता के लिए डिफ़ॉल्ट।

{-sn[ame] | -n[ame]} [<node-name>]

Erlang मशीन का नोड नाम। वितरण अनिवार्य है। डिफ़ॉल्ट से -sname <service name>

-d[ebugtype] [{new|reuse|console}]

निर्दिष्ट करता है कि शेल आउटपुट कहां भेजा जाना है। डिफ़ॉल्ट यह है कि शेल आउटपुट को छोड़ दिया गया है। केवल डिबगिंग के लिए उपयोग किया जाना है।

-ar[gs] [<limited erl arguments>]

एरलंग एमुलेटर के लिए अतिरिक्त तर्क। बचें -noinput , -noshell , और -sname / -name । डिफ़ॉल्ट कोई अतिरिक्त तर्क नहीं है। याद रखें कि कुकी फ़ाइल की सेवाएं आवश्यक रूप से इंटरैक्टिव उपयोगकर्ताओं के समान नहीं हैं। सेवा स्थानीय व्यवस्थापक के रूप में चलती है। एक स्ट्रिंग में एक साथ सभी तर्कों को निर्दिष्ट करें, एक तर्क स्ट्रिंग युक्त रिक्त स्थान निर्दिष्ट करने के लिए दोहरे उद्धरण (") का उपयोग करें, और यदि आवश्यक हो तो तर्क स्ट्रिंग के भीतर एक उद्धरण निर्दिष्ट करने के लिए उद्धृत उद्धरण (\") का उपयोग करें।

-i[nternalservicename] [<internal name>]

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

-c[omment] [<short description>]

सेवा का वर्णन करने वाला एक पाठ्य टिप्पणी निर्दिष्ट करता है। यह टिप्पणी विंडोज सेवा प्रबंधक में सेवा विवरण के रूप में दिखाई देती है।

erlsrv {शुरू | start_disabled | बंद करो | विकलांग | सक्षम करें} <सेवा-नाम>

ये कमांड केवल सुविधा के लिए जोड़े जाते हैं, एक सेवा की स्थिति में हेरफेर करने का सामान्य तरीका नियंत्रण पैनल सेवाओं के एप्लेट के माध्यम से होता है।

start और stop आदेश सेवा शुरू करने और रोकने के लिए सेवा प्रबंधक के साथ संचार करता है। जब तक सेवा शुरू या बंद नहीं होती तब तक कमांड प्रतीक्षा करती है। किसी सेवा को अक्षम करते समय, इसे रोका नहीं जाता है, अक्षम अवस्था तब तक प्रभावी नहीं होती है जब तक कि सेवा बंद नहीं हो जाती है। एक सेवा को सक्षम करना इसे स्वचालित मोड में सेट करता है, जिसे बूट पर शुरू किया गया है। यह आदेश सेवा को मैन्युअल पर सेट नहीं कर सकता है।

start_disabled कमांड एक सेवा पर संचालित होता है, भले ही वह सक्षम / अक्षम हो या प्रारंभ / बंद हो। यह पहले इसे सक्षम करता है (चाहे यह सक्षम हो या न हो), फिर इसे शुरू करना (यदि पहले से शुरू नहीं हुआ है), और फिर इसे सक्षम करना। परिणाम एक अक्षम लेकिन शुरू की गई सेवा है, भले ही इसकी पहले की स्थिति कुछ भी हो। यह एक रिलीज के उन्नयन के दौरान अस्थायी रूप से सेवाएं शुरू करने के लिए उपयोगी है। start_disabled और अनुक्रम enable , start , और disable का उपयोग करने के बीच का अंतर यह है कि अन्य सभी erlsrv कमांड erlsrv में संचालन के अनुक्रम के दौरान लॉक हो start_disable , जिससे erlsrv उपयोगकर्ता के दृष्टिकोण से ऑपरेशन परमाणु erlsrv जाता है।

erlsrv निकालें <सेवा-नाम>

सेवा को उसके सभी पंजीकृत विकल्पों के साथ पूरी तरह से हटा देता है। इसे हटाने से पहले इसे रोक दिया जाता है।

erlsrv सूची [<सेवा-नाम>]

यदि कोई सेवा नाम निर्दिष्ट नहीं है, तो सभी इरलांग सेवाओं की एक संक्षिप्त सूची प्रस्तुत की जाती है। यदि किसी सेवा नाम की आपूर्ति की जाती है, तो उस सेवा के सभी विकल्प प्रस्तुत किए जाते हैं।

erlsrv मदद

एक संक्षिप्त मदद पाठ प्रदर्शित करता है।

वातावरण

सेवा के रूप में शुरू की गई एरलांग मशीन के वातावरण में दो विशेष चर होते हैं:

ERLSRV_SERVICE_NAME
मशीन शुरू करने वाली सेवा का नाम।
ERLSRV_EXECUTABLE
erlsrv.exe का पूर्ण पथ, जिसका उपयोग सेवा में हेरफेर करने के लिए किया जा सकता है। यह आपकी सेवा के लिए दिल की आज्ञा को परिभाषित करते समय काम आता है।

सेवा को फिर से शुरू करने के लिए एक कमांड फाइल इस प्रकार है:

@echo off
%ERLSRV_EXECUTABLE% stop %ERLSRV_SERVICE_NAME%
%ERLSRV_EXECUTABLE% start %ERLSRV_SERVICE_NAME%    

इस कमांड फ़ाइल को तब हार्ट कमांड के रूप में सेट किया जाता है।

पर्यावरण चर का उपयोग यह पता लगाने के लिए भी किया जा सकता है कि हम एक सेवा के रूप में चल रहे हैं और पोर्टआउट प्रोग्राम लॉगआउट पर उत्पन्न नियंत्रण घटनाओं पर सही ढंग से प्रतिक्रिया करते हैं (अगला भाग देखें)।

पोर्ट कार्यक्रम

जब कोई प्रोग्राम सेवा के संदर्भ में चलता है, तो उसे कंट्रोल इवेंट्स को संभालना होगा जो सिस्टम के हर प्रोग्राम को भेजे जाते हैं जब इंटरेक्टिव यूजर लॉग इन करता है। यह कंसोल सबसिस्टम में चलने वाले प्रोग्राम और विंडो एप्लिकेशन के रूप में चलने वाले प्रोग्राम्स के लिए अलग-अलग तरीकों से किया जाता है। कंसोल सबसिस्टम (पोर्ट प्रोग्रामों के लिए सामान्य) में चलने वाला एक एप्लिकेशन win32 फ़ंक्शन SetConsoleCtrlHandler का उपयोग एक कंट्रोल हैंडलर को पंजीकृत करने के लिए करता है, जो CTRL_LOGOFF_EVENT और CTRL_SHUTDOWN_EVENT घटनाओं के जवाब में true है। अन्य अनुप्रयोग केवल WM_ENDSESSION और WM_QUERYENDSESSION को डिफ़ॉल्ट विंडो प्रक्रिया के लिए अग्रेषित करते हैं।

कंसोल कंट्रोल हैंडलर को सेट करने के तरीके का C में एक संक्षिप्त उदाहरण:

#include <windows.h>
/* 
** A Console control handler that ignores the log off events,
** and lets the default handler take care of other events.
*/   
BOOL WINAPI service_aware_handler(DWORD ctrl){
    if(ctrl == CTRL_LOGOFF_EVENT)
        return TRUE;
    if(ctrl == CTRL_SHUTDOWN_EVENT)
        return TRUE;
    return FALSE;
}

void initialize_handler(void){
    char buffer[2];
    /* 
     * We assume we are running as a service if this  
     * environment variable is defined.
     */
    if(GetEnvironmentVariable("ERLSRV_SERVICE_NAME",buffer,
                              (DWORD) 2)){
        /*
        ** Actually set the control handler
        */
        SetConsoleCtrlHandler(&service_aware_handler, TRUE);
    }
}    

टिप्पणियाँ

यद्यपि विकल्प एक यूनिक्स जैसे प्रारूप में वर्णित हैं, विकल्प या कमांड का मामला प्रासंगिक नहीं है, और दोनों विकल्प "/" और "-" का उपयोग विकल्पों के लिए किया जा सकता है।

ध्यान दें कि प्रोग्राम एमुलेटर के bin डायरेक्टरी में रहता है, न कि bin डाइरेक्टरी में सीधे एरलंग रूट के तहत। इसके कारणों में एक रनिंग सिस्टम पर एमुलेटर को अपग्रेड करने की सूक्ष्म समस्या है, जहां रनटाइम सिस्टम के एक नए संस्करण को मौजूदा (और शायद इस्तेमाल किए गए) निष्पादन योग्य को अधिलेखित करने की आवश्यकता नहीं होनी चाहिए।

Erlang सेवाओं में आसानी से हेरफेर करने के लिए, <erlang_root>\erts-<version>\bin बजाय पथ में <erlang_root>\erts-<version>\bin निर्देशिका <erlang_root>\bin erlsrv कार्यक्रम को os:find_executable/1 का उपयोग करके Erlang के अंदर से पाया जा सकता है os:find_executable/1 Erlang फ़ंक्शन।

कार्य करने के लिए रिलीज़ हैंडलिंग के लिए, Erlang मशीन के रूप में start_erl उपयोग करें। जैसा कि above कहा गया above , सेवा का नाम महत्वपूर्ण है।

यह भी देखें

start_erl(1) , release_handler(3)