विंडोज़ सेवा बनाम निर्धारित कार्य


115

किसी प्रोग्राम को बार-बार चलाने के लिए विन्डोज़ सेवाओं बनाम निर्धारित कार्यों के विपक्ष और नियम क्या हैं (जैसे हर दो मिनट में)?

जवाबों:


51

अपडेट करें:

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

मूल उत्तर:

मैं वास्तव में विंडोज शेड्यूलर का प्रशंसक नहीं हूं। उपयोगकर्ता के पासवर्ड को @moodforall के रूप में ऊपर दिया जाना चाहिए , जो किसी के उस उपयोगकर्ता के पासवर्ड को बदलने पर मज़ेदार हो।

विंडोज शेड्यूलर के साथ अन्य बड़ी झुंझलाहट यह है कि यह अंतःक्रियात्मक रूप से चलता है न कि एक पृष्ठभूमि प्रक्रिया के रूप में। जब RDP सत्र के दौरान हर 20 मिनट में 15 MS-DOS विंडो पॉप अप होती हैं, तो आप अपने आप को किक मारेंगे, जिसने उन्हें विंडोज सर्विसेज के रूप में स्थापित नहीं किया।

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

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

आपके द्वारा यह सब लिखे जाने के बाद, आप सोचते हैं, मैंने थ्रेड का उपयोग क्यों नहीं किया? यह मुझे वर्तमान धागा को तब तक चलने देने देता है जब तक कि यह समाप्त नहीं हो जाता है और फिर अंतराल अंतराल में किक करता है, धागा सोने के लिए जाता है और आवश्यक समय के बाद फिर से बंद हो जाता है। साफ!

तब आप इंटरनेट पर सभी विशेषज्ञों को बहुत सारे विशेषज्ञों के साथ सलाह देते हुए बताते हैं कि यह वास्तव में खराब प्रोग्रामिंग अभ्यास कैसे है:

http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx

तो आप अपना सिर खुजलाएंगे और अपने आप को सोचेंगे, डब्ल्यूटीएफ, अनडू पेंडिंग चेकआउट -> हां, मुझे यकीन है -> आज के सभी कामों को पूर्ववत करें ... लानत है, धिक्कार है, लानत है ...।

हालाँकि, मुझे यह पैटर्न पसंद है, भले ही सभी को लगता है कि यह बकवास है:

एकल-थ्रेड दृष्टिकोण के लिए ऑनस्टार्ट विधि।

protected override void OnStart (string args) {

   // Create worker thread; this will invoke the WorkerFunction
   // when we start it.
   // Since we use a separate worker thread, the main service
   // thread will return quickly, telling Windows that service has started
   ThreadStart st = new ThreadStart(WorkerFunction);
   workerThread = new Thread(st);

   // set flag to indicate worker thread is active
   serviceStarted = true;

   // start the thread
   workerThread.Start();
}

कोड एक अलग थ्रेड को इंस्टेंट करता है और हमारे कार्यकर्ता फ़ंक्शन को इसमें संलग्न करता है। फिर यह थ्रेड शुरू करता है और ऑनस्टार्ट इवेंट को पूरा करने देता है, ताकि विंडोज को यह न लगे कि यह सर्विस लटका हुआ है।

एकल-थ्रेड दृष्टिकोण के लिए कार्यकर्ता विधि।

/// <summary>
/// This function will do all the work
/// Once it is done with its tasks, it will be suspended for some time;
/// it will continue to repeat this until the service is stopped
/// </summary>
private void WorkerFunction() {

   // start an endless loop; loop will abort only when "serviceStarted"
   // flag = false
   while (serviceStarted) {

      // do something
      // exception handling omitted here for simplicity
      EventLog.WriteEntry("Service working",
         System.Diagnostics.EventLogEntryType.Information);

      // yield
      if (serviceStarted) {
         Thread.Sleep(new TimeSpan(0, interval, 0));
      }
   }

   // time to end the thread
   Thread.CurrentThread.Abort();
}

एकल-थ्रेड दृष्टिकोण के लिए OnStop विधि।

protected override void OnStop() {

   // flag to tell the worker process to stop
   serviceStarted = false;

   // give it a little time to finish any pending work
   workerThread.Join(new TimeSpan(0,2,0));
}

स्रोत: http://tutorials.csharp-online.net/Creating_a_.NET_Windows_Service%E2%80%94Alternative_1%3a_Use_a_Separate_Thread (डेड लिंक)

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


2
वास्तव में आप अपने स्वयं के सेवा खाते के साथ अपनी सेवा चलाना चाह सकते हैं। यदि सब कुछ एक सेवा या NETWORKSERVICE चलाता है, तो आप अपने ऐप को अनुमति दे रहे हैं कि इसकी आवश्यकता नहीं है (और यह न केवल एक सर्वर बल्कि आपके पूरे नेटवर्क की सुरक्षा को जोखिम में डाल सकता है।)
मैथ्यू Whited

1
वास्तव में। मुझे नहीं लगता कि मैंने अन्यथा कहा है?
रेबेका

4
आप अपने पहले पैराग्राफ में अन्यथा निहित हैं। यदि आप बिल्ट-इन खातों में से एक का उपयोग नहीं कर रहे हैं, तो उपयोगकर्ता का पासवर्ड कार्य शेड्यूलर के लिए उसी तरह की सेवाओं के लिए आवश्यक है।
निक कॉक्स

1
@MatthewWhited NT AUTHORITY\NetworkServiceसीमित विशेषाधिकारों के साथ एक खाता है।
इयान बॉयड

1
@IanBoyd अन्य अनुप्रयोगों से संबंधित NetworkService को सौंपी गई किसी भी अनुमति सहित।
मैथ्यू Whited

16

यहाँ कुछ गलत जानकारी। विंडोज़ शेड्यूलर बिना पॉपअप और बिना किसी पासवर्ड की आवश्यकता के बिना पृष्ठभूमि में कार्य चलाने में पूरी तरह सक्षम है। इसे NT AUTHORITY \ SYSTEM खाते के अंतर्गत चलाएँ। इस schtasks स्विच का उपयोग करें:

/ आरयू सिस्टम

लेकिन हां, नेटवर्क संसाधनों तक पहुंचने के लिए, सबसे अच्छा अभ्यास एक अलग नॉन-एक्सपायरिंग पासवर्ड पॉलिसी के साथ एक सेवा खाता है।

संपादित करें

अपने OS और कार्य की आवश्यकताओं के आधार पर, आप /ruविकल्प के साथ स्थानीय प्रणाली की तुलना में कम विशेषाधिकार प्राप्त खातों का उपयोग करने में सक्षम हो सकते हैं ।

ठीक मैनुअल से ,

/RU username

A value that specifies the user context under which the task runs. 
For the system account, valid values are "", "NT AUTHORITY\SYSTEM", or "SYSTEM". 
For Task Scheduler 2.0 tasks, "NT AUTHORITY\LOCALSERVICE", and 
"NT AUTHORITY\NETWORKSERVICE" are also valid values.

टास्क शेड्यूलर 2.0 विस्टा और सर्वर 2008 से उपलब्ध है।

XP और सर्वर 2003 में, systemएकमात्र विकल्प है।


2
कृपया चलाने के रूप में Local Service(उर्फ NT AUTHORITY\LocalService) के बजाय LocalSystem(उर्फ .\LocalSystem)। पूर्व के पास सीमित अधिकार हैं, जबकि बाद वाला एक प्रशासक है
इयान बॉयड

1
हां अतिरिक्त खाते LocalServiceऔर वी 2 विस्टा NetworkServiceमें उपलब्ध हैं schtasksऔर जहां संभव हो, इसे प्राथमिकता दी जानी चाहिए। इस समय, इसे schtasksXP और सर्वर 2003 में संदर्भित किया गया है , जो केवल Systemपुराने संस्करण मैनुअल टेक्नेट के
अमित नायडू

XP पर आप निर्धारित कार्य को सिस्टम के रूप में नहीं चला सकते। उसके साथ अच्छा भाग्य। यह इसे अच्छी तरह से संक्षेप में बताता है
Pupsik

11

ऐप को शुरू करने और छोड़ने का ओवरहेड क्या है? हर दो मिनट में अक्सर होता है। एक सेवा शायद आपके आवेदन को निष्पादित करने की तुलना में सिस्टम को अधिक सुचारू रूप से चलाने देगी।

जब उपयोगकर्ता लॉग इन नहीं होता है, तो दोनों समाधान कार्यक्रम को चला सकते हैं, इसलिए वहां कोई अंतर नहीं है। एक सेवा लिखना कुछ हद तक एक नियमित डेस्कटॉप ऐप की तुलना में शामिल है, हालांकि - आपको एक अलग GUI क्लाइंट की आवश्यकता हो सकती है जो TCP / IP, नामित पाइप, आदि के माध्यम से सेवा ऐप के साथ संवाद करेगा।

एक उपयोगकर्ता के पीओवी से, मुझे आश्चर्य है कि नियंत्रण करना आसान है। अधिकांश गैर-तकनीकी उपयोगकर्ताओं के लिए दोनों सेवाएँ और अनुसूचित कार्य बहुत अधिक नहीं हैं, अर्थात उन्हें एहसास भी नहीं होगा कि वे मौजूद हैं और उन्हें कॉन्फ़िगर / रोका / पुनर्निर्धारित और इसी तरह कॉन्फ़िगर किया जा सकता है।


10

.NET विकास में, मैं आमतौर पर एक कंसोल एप्लिकेशन विकसित करके शुरू करता हूं, जो कंसोल विंडो में सभी लॉगिंग आउटपुट को चलाएगा। हालाँकि, यह केवल कंसोल अनुप्रयोग है जब इसे कमांड तर्क के साथ चलाया जाता है /console। जब यह इस पैरामीटर के बिना चलाया जाता है, तो यह विंडोज सेवा के रूप में कार्य करता है, जो मेरे स्वयं के कस्टम कोडित शेड्यूल किए गए टाइमर पर चलता रहेगा।

विंडोज सर्विसेज, आई माइ माइ, आमतौर पर लंबे समय तक चलने वाले एप्लिकेशन के बजाय अन्य एप्लिकेशन को प्रबंधित करने के लिए उपयोग की जाती हैं। OR .. वे SQL सर्वर, BizTalk, RPC Connections, IIS (भले ही IIS तकनीकी रूप से अन्य कार्यों के लिए काम करते हैं) जैसे हैवीवेट एप्लिकेशन को लगातार चला रहे हैं।

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

एक परियोजना के लिए मैं 8 या 9 विंडोज सेवाओं के विकास में शामिल रहा हूं, लेकिन ये मेमोरी में बेकार बैठते हैं, उदाहरण के लिए 20MB या अधिक मेमोरी खा रहे हैं। शेड्यूल किए गए कार्य अपना व्यवसाय करेंगे, और मेमोरी को तुरंत जारी करेंगे।


8

शब्द 'serv'ice आम में' serv'er के साथ कुछ साझा करता है। यह हमेशा चल रहा है, और 'सर्व' होने की उम्मीद है। एक कार्य एक कार्य है।

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

फिर शेड्यूलिंग पहलू है। यदि आप किसी विशिष्ट समय पर कुछ चलाना चाहते हैं, तो शेड्यूल करें। यदि आप नहीं जानते कि आपको कब इसकी ज़रूरत पड़ने वाली है, या इसे "मक्खी पर" सेवा की आवश्यकता है।

मेरी प्रतिक्रिया प्रकृति में अधिक दार्शनिक है क्योंकि यह बहुत ही समान है कि मनुष्य दूसरे के साथ कैसे बातचीत और काम करते हैं। जितना अधिक हम संचार की कला को समझते हैं, और "संस्थाएं" उनकी भूमिका को समझती हैं, यह निर्णय उतना ही आसान हो जाता है।

सभी दर्शन एक तरफ, जब आप "तेजी से प्रोटोटाइपिंग" कर रहे हैं, जैसा कि मेरा आईटी विभाग अक्सर करता है, तो आप कुछ भी करते हैं जो आपको पूरा करने के लिए होता है। एक बार अवधारणा सामान के प्रोटोटाइप और सबूत के बाहर होने के बाद, आमतौर पर शुरुआती योजना और खोज में, आपको यह तय करना होगा कि दीर्घकालिक स्थिरता के लिए अधिक विश्वसनीय क्या है।

ठीक है, इसलिए निष्कर्ष में, यह बहुत सारे कारकों पर निर्भर है, लेकिन उम्मीद है कि इसने भ्रम के बजाय अंतर्दृष्टि प्रदान की है।


4

Windows सेवा में किसी को भी लॉग इन करने की आवश्यकता नहीं होती है, और Windows में सेवा परिणामों को रोकने, शुरू करने और लॉग इन करने की सुविधा होती है।

एक निर्धारित कार्य के लिए आपको विंडोज सेवा लिखने का तरीका सीखने की आवश्यकता नहीं है।


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

1
@moodforaday जब तक खाता कॉन्फ़िगर नहीं किया गया है (जैसे NT AUTHORITY\LocalService, या NT AUTHORITY\NetworkService)। किसी भी दिए गए पासवर्ड को अनदेखा कर दिया जाता है क्योंकि खातों में कोई पासवर्ड नहीं होता है।
इयान बॉयड

4
  1. सही अनुमतियों के साथ विंडोज़ सेवाओं को सेट अप और लॉक करना आसान है।
  2. सेवाएं अधिक "दृश्यमान" हैं जिसका अर्थ है कि हर कोई (यानी: टेक) जानता है कि कहां देखना है।

5
आपका पहला बिंदु अनुसूचित कार्यों पर भी लागू होता है। मुझे यकीन नहीं है कि "अधिक दृश्यमान" का क्या मतलब है। अनुसूचित कार्यों को सेवाओं के समान आसान देखा जा सकता है।
w4g3n3r

@ w4g3n3r: अधिकांश तकनीकी लोग जानते हैं कि विंडोज़ सेवाओं को कैसे देखना है, यह देखना है कि क्या चल रहा है। इसके अलावा, यदि यह एक सेवा है (और चल रही है) तो यह सामान्य कार्य प्रबंधक सूची में दिखाई देगी। बहुत कम लोग कभी निर्धारित कार्यों का उपयोग करते हैं।
NotMe

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

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

4
"अधिकांश तकनीकी लोग जानते हैं कि विंडोज़ सेवाओं को कैसे देखना है, यह देखना है कि क्या चल रहा है" । यह सेवाओं के साथ समस्याओं में से एक है; वे हर समय चलाते हैं - उपयोगकर्ता और गिरी संसाधनों का उपभोग बस एक चलने वाली प्रक्रिया की बुकिंग के लिए। यही कारण है कि Microsoft एकल प्रक्रिया में अधिक से अधिक सेवाओं में विलीन हो गया ( svchost.exe ); प्रक्रियाओं से बस बेकार संसाधनों की खपत को दूर करने के लिए।
इयान बॉयड

2

दोनों प्रदान क्यों नहीं करते?

अतीत में मैंने 'कोर' बिट्स को एक लाइब्रेरी में रखा है और जो भी एक सेवा के साथ-साथ एक कंसोल ऐप में जो भी है।

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


2

यह एक पुराना सवाल है, लेकिन मैंने जो भी सामना किया है उसे साझा करना चाहूंगा।

हाल ही में मुझे एक रडार (एक मौसम विज्ञान वेबसाइट से) के स्क्रीनशॉट को कैप्चर करने और हर 10 मिनट में सर्वर में सहेजने की आवश्यकता बताई गई थी।

इसके लिए मुझे WebBrowser का उपयोग करना आवश्यक था। मैं आमतौर पर विंडोज़ सेवाएँ देता हूँ इसलिए मैंने यह एक सेवा भी बनाने का फैसला किया है लेकिन यह दुर्घटनाग्रस्त होती रहेगी। यह मैंने इवेंट व्यूअर में देखा फॉल्टिंग मॉड्यूल पथ : C: \ Windows \ system32 \ MSHTML.dll

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

मैं वास्तव में जॉन गैलोवे के लेख को पसंद करता था, जिसे मार्क रैनसम ने स्वीकार किया था।

हाल ही में सर्वर पर पासवर्ड मुझे स्वीकार किए बिना बदल दिए गए थे और सभी सेवाएं निष्पादित करने में विफल रहीं क्योंकि वे लॉगऑन नहीं कर सकते थे। इसलिए लेख में ppl का दावा है कि यह एक समस्या है। मुझे लगता है कि विंडोज़ सेवाएं एक ही समस्या का सामना कर सकती हैं (Pls मुझे सही करें अगर मैं गलत हूं, तो मैं एक नौसिखिया हूं)

कार्य शेड्यूलर विंडो पॉप अप या कंसोल विंडो पॉप अप का उपयोग करते हुए भी, उल्लेखित बात। मैंने कभी उसका सामना नहीं किया। यह पॉप अप हो सकता है लेकिन यह कम से कम बहुत तात्कालिक है।


मुझे लगा कि जॉन गैलोवे के लेख ने कुछ अच्छे बिंदु बनाए हैं। इसके अलावा, पासवर्ड बदलने के कारण या निष्पादित करने में विफल होने वाले अनुसूचित कार्यों के बारे में शिकायत के लिए, शेड्यूल किए गए कार्य को चलाने में विफल होना संभव है, इसलिए आप उपयोगकर्ताओं को सूचित कर सकते हैं या आप जो भी करना चाहते हैं। यहां देखें समाधान: superuser.com/questions/249103/…
Dan Csharpster

1

आम तौर पर, मुख्य संदेश यह है और यह होना चाहिए कि कोड को प्रत्येक "ट्रिगर / क्लाइंट" से निष्पादन योग्य होना चाहिए। इसलिए इसे एक से दूसरे दृष्टिकोण पर स्विच करने के लिए रॉकेट विज्ञान नहीं होना चाहिए।

अतीत में हम कम या ज्यादा हमेशा विंडोज सेवाओं का उपयोग करते थे लेकिन चूंकि हमारे अधिक से अधिक ग्राहक एज़्योर कदम से कदम मिलाते हैं और एज़्योर में वेबजॉब के लिए एक कंसोल ऐप (एक अनुसूचित कार्य के रूप में तैनात) से स्वैप बहुत आसान है। एक Windows सेवा, हम अभी के लिए अनुसूचित कार्य पर ध्यान केंद्रित करते हैं। यदि हम सीमाओं में चलते हैं, तो हम सिर्फ विंडोज सर्विस प्रोजेक्ट को पूरा करते हैं और वहां से उसी तर्क को कहते हैं (जब तक ग्राहक ऑनप्रेम काम कर रहे हैं ..) :)

बीआर, वाई


0

विंडोज सेवाएं तब तक अधिक धैर्य चाहती हैं जब तक कि यह पूरा न हो जाए। यह थोड़ा कठिन डिबग और स्थापित है। यह फेसलेस है। यदि आपको ऐसे कार्य की आवश्यकता है जो हर दूसरे, मिनट या घंटे में किया जाना चाहिए, तो आपको Windows सेवा का चयन करना चाहिए।

शेड्यूल्ड टास्क जल्दी विकसित होता है और उसका चेहरा होता है। यदि आपको दैनिक या साप्ताहिक कार्य की आवश्यकता है, तो आप अनुसूचित कार्य का उपयोग कर सकते हैं।

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