উত্তর:
হালনাগাদ:
আমার মূল উত্তরটির প্রায় চার বছর পরে এবং এই উত্তরটি খুব পুরানো। যেহেতু উইন্ডোজ পরিষেবাদির সাথে টপশেল্ফ বরাবর এসেছিল সহজতর হয়েছিল। এখন আপনাকে কীভাবে ব্যর্থতা সমর্থন করবেন তা নির্ধারণ করতে হবে ...
আসল উত্তর:
আমি সত্যই উইন্ডোজ শিডিউলের ভক্ত নই। ব্যবহারকারীর পাসওয়ার্ডটি অবশ্যই উপরের মুডফোরাল পয়েন্ট হিসাবে সরবরাহ করতে হবে , যে মজাদার যখন কেউ সেই ব্যবহারকারীর পাসওয়ার্ড পরিবর্তন করে।
উইন্ডোজ শিডিউলারের সাথে অন্য বড় বিরক্তি হ'ল এটি ব্যাকগ্রাউন্ড প্রক্রিয়া হিসাবে নয় বরং ইন্টারেক্টিভভাবে চলে। যখন আরডিপি সেশনের সময় প্রতি 20 মিনিটে 15 এমএস-ডস উইন্ডোজ পপ আপ হয়, আপনি নিজেকে লাথি মারবেন যা সেগুলি উইন্ডোজ পরিষেবা হিসাবে ইনস্টল করেনি।
আপনি যা-ই চয়ন করুন আমি অবশ্যই আপনার প্রসেসিং কোডটি কনসোল অ্যাপ্লিকেশন বা উইন্ডোজ পরিষেবা থেকে আলাদা আলাদা উপাদান হিসাবে আলাদা করার পরামর্শ দিচ্ছি। তারপরে আপনার পছন্দ আছে, হয় কনসোল অ্যাপ্লিকেশন থেকে কর্মী প্রক্রিয়াটি কল করতে এবং এটিকে উইন্ডোজ শিডিউলারে আটকানো, বা উইন্ডোজ পরিষেবা ব্যবহার করতে হবে।
আপনি দেখতে পাবেন যে একটি উইন্ডোজ পরিষেবা নির্ধারণ করা মজাদার নয়। মোটামুটি সাধারণ পরিস্থিতিটি হ'ল আপনার একটি দীর্ঘ চলমান প্রক্রিয়া যা আপনি পর্যায়ক্রমে চালাতে চান। তবে, আপনি যদি একটি সারি প্রক্রিয়াকরণ করছেন, তবে আপনি একই কর্মী একই কাতারে প্রক্রিয়াজাতকরণের দুটি উদাহরণ চান না। সুতরাং আপনাকে টাইমার পরিচালনা করতে হবে, আপনার দীর্ঘ চলমান প্রক্রিয়া নির্ধারিত টাইমার ব্যবধানের চেয়ে বেশি সময় চলেছে কিনা তা নিশ্চিত করার জন্য, বিদ্যমান প্রক্রিয়াটি শেষ না হওয়া পর্যন্ত এটি আর আরম্ভ করবে না।
আপনি এই সমস্ত লেখার পরে, আপনি ভাবেন, কেন আমি শুধু থ্রেড ব্যবহার করিনি? ঘুম? এটি আমাকে বর্তমান থ্রেডটি শেষ না হওয়া পর্যন্ত চলতে দেয় এবং তারপরে বিরতি বিরতিতে লাথি দেয়, থ্রেডটি ঘুমিয়ে যায় এবং প্রয়োজনীয় সময়ের পরে আবার লাথি মেরে। ঝরঝরে!
তারপরে আপনি ইন্টারনেটে সমস্ত পরামর্শ পড়ুন প্রচুর বিশেষজ্ঞের সাথে এটি কীভাবে প্রোগ্রামিং অনুশীলনটি খারাপ তা বলে:
সুতরাং আপনি আপনার মাথাটি স্ক্র্যাচ করে নিজেকে ভাববেন, ডাব্লুটিএফ, মুলতুবি থাকা চেকআউটগুলি পূর্বাবস্থায় ফেলুন -> হ্যাঁ, আমি নিশ্চিত -> আজকের সমস্ত কাজকে পূর্বাবস্থায় ফিরিয়ে দিন ..... অভিশাপ, অভিশাপ, অভিশাপ ....
যাইহোক, আমি এই প্যাটার্নটি পছন্দ করি, এমনকি যদি সবাই এটি বোকা বলে মনে করে:
একক থ্রেড পদ্ধতির জন্য অন স্টার্ট পদ্ধতি।
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(); }
একক থ্রেড পদ্ধতির জন্য অনস্টপ পদ্ধতি।
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%94 বিকল্প_1৯৩৩ এ_উস_এ_পারাট_ট্রেড (মৃত লিঙ্ক)
আমি বছরের পর বছর ধরে এ জাতীয় প্রচুর উইন্ডোজ পরিষেবা চালিয়ে যাচ্ছি এবং এটি আমার পক্ষে কাজ করে। আমি এখনও প্রস্তাবিত প্যাটার্নটি দেখিনি যা লোকেরা তাতে সম্মত হয়। শুধু আপনার জন্য কাজ করে।
NT AUTHORITY\NetworkService
সীমিত অধিকারসহ একটি অ্যাকাউন্ট।
কিছু ভুল তথ্য এখানে। উইন্ডোজ পপআপ না করে এবং পাসওয়ার্ডের প্রয়োজনীয়তা ছাড়াই উইন্ডোজ শিডিউলার ব্যাকগ্রাউন্ডে কাজগুলি চালানোর জন্য পুরোপুরি সক্ষম। এটি এনটি অথরিটি Y সিস্টেম অ্যাকাউন্টের অধীনে চালান। এই স্কটাস্কস সুইচটি ব্যবহার করুন:
/ রু সিস্টেম
তবে হ্যাঁ, নেটওয়ার্ক সংস্থান অ্যাক্সেসের জন্য, সর্বোত্তম অনুশীলন হ'ল একটি পৃথক অ-মেয়াদোত্তীর্ণ পাসওয়ার্ড নীতি সহ একটি পরিষেবা অ্যাকাউন্ট।
সম্পাদনা
আপনার ওএস এবং টাস্কের প্রয়োজনীয়তার উপর নির্ভর করে আপনি বিকল্পের সাহায্যে লোকালসিস্টেমের চেয়ে কম সুবিধাযুক্ত অ্যাকাউন্টগুলি ব্যবহার করতে সক্ষম হতে পারেন /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 থেকে উপলব্ধ।
এক্সপি এবং সার্ভার 2003 system
এ একমাত্র বিকল্প।
Local Service
(ওরফে NT AUTHORITY\LocalService
) না হয়ে LocalSystem
(ওরফে .\LocalSystem
) হিসাবে চালান । প্রাক্তনটির সীমিত অধিকার রয়েছে, তবে পরবর্তীকর্তা একজন প্রশাসক
LocalService
এবং v2 ভিস্তার পরে NetworkService
পাওয়া যায় এবং schtasks
যেখানে সম্ভব সেখানে পছন্দ করা উচিত। এই সময়ে, এটি schtasks
এক্সপি এবং সার্ভার 2003-এ উল্লেখ করা হয়েছে যা কেবলমাত্র System
পুরানো সংস্করণ ম্যানুয়াল টেকনিক.মাইক্রোসফট.ইন.সু
অ্যাপ্লিকেশন শুরু এবং ছাড়ার ওভারহেড কী? প্রতি দুই মিনিটে বেশিরভাগ সময় প্রায়শই হয়। কোনও পরিষেবা সম্ভবত আপনার অ্যাপ্লিকেশনটি প্রায়শই ঘন ঘন সঞ্চালনের চেয়ে আরও সুচারুভাবে চালাতে দেয়।
ব্যবহারকারী যখন লগ ইন না করে থাকে তখন উভয় সমাধানই প্রোগ্রামটি চালাতে পারে, সুতরাং সেখানে কোনও পার্থক্য নেই। কোনও পরিষেবা রচনা নিয়মিত ডেস্কটপ অ্যাপের চেয়ে কিছুটা বেশি জড়িত, যদিও - আপনার একটি পৃথক জিইউআই ক্লায়েন্টের প্রয়োজন হতে পারে যা টিসিপি / আইপি, নামযুক্ত পাইপ ইত্যাদির মাধ্যমে পরিষেবা অ্যাপের সাথে যোগাযোগ করবে client
কোনও ব্যবহারকারীর পিওভি থেকে, আমি ভাবছি যেটি নিয়ন্ত্রণ করা সহজ। উভয় পরিষেবাদি এবং নির্ধারিত কাজগুলি বেশিরভাগ অ-প্রযুক্তিগত ব্যবহারকারীদের নাগালের বাইরে, যেমন তারা উপলব্ধি করতে পারে না যে তারা বিদ্যমান এবং কনফিগার করা / থামানো / পুনরায় নির্ধারিত করা যায় ইত্যাদি so
.NET বিকাশে, আমি সাধারণত একটি কনসোল অ্যাপ্লিকেশন বিকাশ করে শুরু করি, যা চালিত হবে সমস্ত কনসোল উইন্ডোতে লগিং আউটপুট। যাইহোক, এটি কেবল কনসোল অ্যাপ্লিকেশন যখন এটি কমান্ড আর্গুমেন্ট দিয়ে চালিত হয় /console
। এটি যখন এই প্যারামিটার ছাড়াই চালানো হয়, এটি একটি উইন্ডোজ পরিষেবা হিসাবে কাজ করে, যা আমার নিজস্ব কাস্টম কোডেড শিডিয়াল টাইমারটিতে চলতে থাকবে।
আমি মনে করি উইন্ডোজ পরিষেবাদি সাধারণত দীর্ঘায়িত অ্যাপ্লিকেশন না হয়ে অন্য অ্যাপ্লিকেশনগুলি পরিচালনা করতে ব্যবহৃত হয়। বা .. তারা নিরবচ্ছিন্নভাবে এসকিউএল সার্ভার, বিজটালক, আরপিসি সংযোগগুলি, আইআইএসের মতো হেভিওয়েট অ্যাপ্লিকেশনগুলি চালাচ্ছে (যদিও আইআইএস প্রযুক্তিগতভাবে অফলোডগুলি অন্যান্য প্রক্রিয়াতে কাজ করে)।
ব্যক্তিগতভাবে, আমি পুনরাবৃত্তিমূলক রক্ষণাবেক্ষণের কাজগুলি এবং ফাইল অনুলিপি / সিঙ্ক্রোনাইজেশন, বাল্ক ইমেল প্রেরণ, ফাইল মোছা বা ফাইল সংরক্ষণাগার সংরক্ষণ, ডেটা সংশোধন (যখন অন্যান্য কাজের ক্ষেত্র উপলব্ধ না থাকে) এর জন্য উইন্ডো পরিষেবাদিগুলির উপরে নির্ধারিত কাজগুলির পক্ষে আমি সমর্থন করি।
একটি প্রকল্পের জন্য আমি 8 বা 9 উইন্ডোজ পরিষেবাদির বিকাশের সাথে জড়িত ছিলাম তবে এগুলি মেমোরি, অলস, 20MB খাওয়া বা উদাহরণস্বরূপ আরও বেশি মেমরি নিয়ে বসে থাকে। তফসিলযুক্ত কাজগুলি তাদের ব্যবসা করবে এবং সঙ্গে সঙ্গে স্মৃতি ছেড়ে দেবে।
'সার্ভিস' শব্দটি 'সার্ভার' এর সাথে কিছু মিল রয়েছে। এটি সর্বদা চলমান এবং 'সার্ভ' প্রত্যাশিত। একটি কাজ একটি কাজ।
চরিত্রে অভিনয় করা. যদি আমি অন্য অপারেটিং সিস্টেম, অ্যাপ্লিকেশন, বা ডিভাইস এবং আমি কোনও পরিষেবা কল করি তবে আমি এটি চলমান আশা করি এবং আমি প্রতিক্রিয়া আশা করি। যদি আমার (ওএস, অ্যাপ, ডেভ) কেবল একটি বিচ্ছিন্ন কাজ সম্পাদন করা প্রয়োজন তবে আমি একটি কার্য সম্পাদন করব, তবে যদি আমি যোগাযোগের প্রত্যাশা করি, সম্ভবত দ্বি-মুখী যোগাযোগ করি তবে আমি একটি পরিষেবা চাই। দুটি জিনিস যোগাযোগের জন্য সবচেয়ে কার্যকর উপায়ে বা কোনও একক জিনিস যা একটি কার্য সম্পাদন করতে চায় তা করতে এটি করতে হয়।
তারপরে সময়সূচী দিকটি রয়েছে। আপনি যদি একটি নির্দিষ্ট সময়ে চালানোর জন্য কিছু চান, তফসিল। আপনি কখন জানেন না যে আপনার কখন এটি প্রয়োজন হবে বা তার প্রয়োজন "উড়ানের দিকে", পরিষেবা।
আমার প্রতিক্রিয়া প্রকৃতিতে আরও দার্শনিক কারণ কারণ এটি কীভাবে মানুষ অন্যের সাথে মিথস্ক্রিয়া হয় এবং কীভাবে কাজ করে তার সাথে এটি একইরকম। আমরা যোগাযোগের শিল্পকে যত বেশি বুঝি এবং "সত্তা" তাদের ভূমিকা বুঝতে পারে ততই এই সিদ্ধান্তটি তত সহজ হয়।
সমস্ত দর্শন বাদ দিয়ে, যখন আপনি "দ্রুত প্রোটোটাইপিং" করেন, যেমনটি আমার আইটি ডিপার্টমেন্ট প্রায়শই করে, আপনি শেষগুলি পূরণ করতে যা যা করতে হয় তাই করেন। একবার ধারণা সামগ্রীর প্রোটোটাইপিং এবং প্রমাণের উপায় শেষ হয়ে যায়, সাধারণত প্রাথমিক পরিকল্পনা এবং আবিষ্কারের পরে, আপনাকে দীর্ঘমেয়াদী স্থায়িত্বের জন্য আরও নির্ভরযোগ্য কোনটি সিদ্ধান্ত নিতে হবে।
ঠিক আছে, সুতরাং উপসংহারে, এটি অনেকগুলি বিষয়ের উপর অত্যন্ত নির্ভরশীল, তবে আশা করি এটি বিভ্রান্তির পরিবর্তে অন্তর্দৃষ্টি দিয়েছে।
উইন্ডোজ পরিষেবায় কারও লগইন হওয়া প্রয়োজন হয় না, এবং উইন্ডোজ সেবার ফলাফলগুলি থামাতে, শুরু করতে এবং লগ করার জন্য সুবিধাগুলি রাখে।
একটি নির্ধারিত টাস্কের জন্য আপনাকে উইন্ডোজ পরিষেবা কীভাবে লিখতে হয় তা শিখতে হবে না।
NT AUTHORITY\LocalService
, বা NT AUTHORITY\NetworkService
)। সরবরাহকৃত কোনও পাসওয়ার্ড উপেক্ষা করা হবে কারণ অ্যাকাউন্টগুলির কোনও পাসওয়ার্ড নেই।
দু'জনই কেন সরবরাহ করবেন না?
অতীতে আমি একটি লাইব্রেরিতে 'কোর' বিট রেখেছিলাম এবং যেকোন কিছুতে কলটি গুটিয়ে রেখেছি (গোগো () একটি পরিষেবা পাশাপাশি একটি কনসোল অ্যাপ্লিকেশন।
প্রতি দু'মিনিটে আপনি কিছুটা ছুঁড়ে মারছেন এমন প্রতিক্রিয়াটি শালীন যে এটি খুব বেশি করছে না (যেমন, কেবল একটি "পিং" টাইপ ফাংশন)। মোড়কগুলিতে একটি একক পদ্ধতি কল এবং কিছু লগিংয়ের চেয়ে বেশি কিছু থাকা উচিত নয়।
এটি একটি পুরানো প্রশ্ন তবে আমি যা सामना করেছি তা ভাগ করে নিতে চাই।
সম্প্রতি আমাকে একটি রাডার (একটি আবহাওয়া সম্পর্কিত ওয়েবসাইট থেকে) এর স্ক্রিনশট ক্যাপচার এবং প্রতি 10 মিনিটে সার্ভারে এটি সংরক্ষণ করার জন্য প্রয়োজনীয়তা দেওয়া হয়েছিল।
এটির জন্য আমাকে ওয়েব ব্রাউজার ব্যবহার করা দরকার। আমি সাধারণত উইন্ডোজ পরিষেবাগুলি তৈরি করি তাই আমিও এই একটি পরিষেবাটি করার সিদ্ধান্ত নিয়েছি তবে এটি ক্র্যাশ করেই থাকবে would আমি ইভেন্ট ভিউয়ারের ফল্টিং মডিউলটির পথে এটি দেখেছি : সি: \ উইন্ডোজ \ সিস্টেম 32 \ এমএসএইচটিএমএল.ডিএল
যেহেতু টাস্কটি জরুরি ছিল এবং আমার গবেষণা এবং পরীক্ষার জন্য খুব কম সময় ছিল, তাই আমি একটি সাধারণ কনসোল অ্যাপ্লিকেশন ব্যবহার করার সিদ্ধান্ত নিয়েছিলাম এবং এটিকে একটি কার্য হিসাবে ট্রিগার করেছিলাম এবং এটি কার্যকরভাবে কার্যকর করা হয়েছিল।
আমি জোন গ্যাল্লোয়ের নিবন্ধটি মার্ক র্যানসমের গৃহীত উত্তরে প্রস্তাবিত পছন্দ করেছি ।
সম্প্রতি সার্ভারগুলিতে পাসওয়ার্ডগুলি আমাকে স্বীকার না করে পরিবর্তন করা হয়েছিল এবং সমস্ত পরিষেবাদি লগইন করতে না পারায় এটি কার্যকর করতে ব্যর্থ হয়েছিল। সুতরাং পিপিএল নিবন্ধে দাবি করে মন্তব্য করেছে যে এটি একটি সমস্যা। আমি মনে করি উইন্ডোজ পরিষেবাগুলি একই সমস্যার মুখোমুখি হতে পারে (প্লিজ। আমি ভুল হলে আমাকে সংশোধন করুন, আমি কেবল নবাগত)
উল্লিখিত জিনিসটি, যদি টাস্ক শিডিয়ুলার উইন্ডোগুলি পপ আপ ব্যবহার করে বা কনসোল উইন্ডোটি পপ আপ হয়। আমি কখনই এর মুখোমুখি হই নি। এটি পপ আপ হতে পারে তবে এটি অন্তত খুব তাত্ক্ষণিক।
সাধারণত, মূল বার্তাটি হ'ল এবং হওয়া উচিত কোডটি নিজেই প্রতিটি এবং প্রতিটি "ট্রিগার / ক্লায়েন্ট" থেকে নির্বাহযোগ্য। সুতরাং এক থেকে অন্য পদ্ধতির দিকে স্যুইচ করা রকেট বিজ্ঞান হওয়া উচিত নয়।
অতীতে আমরা কম বেশি সর্বদা উইন্ডোজ পরিষেবাদি ব্যবহার করতাম তবে আমাদের আরও অনেক বেশি গ্রাহক ধাপে ধাপে অ্যাজুরিতে স্যুইচ করে এবং একটি কনসোল অ্যাপ্লিকেশন থেকে (শিডিউড টাস্ক হিসাবে মোতায়েন করা) অ্যাজুরের ওয়েব জব থেকে স্যুপ বদলানো থেকে অনেক সহজ from একটি উইন্ডোজ পরিষেবা, আমরা আপাতত তফসিলি কার্যগুলিতে ফোকাস করি। যদি আমরা সীমাবদ্ধতার মধ্যে চলে যাই তবে আমরা কেবল উইন্ডোজ পরিষেবা প্রকল্পটি র্যাম্প করব এবং সেখান থেকে একই যুক্তিটি কল করব (যতক্ষণ না গ্রাহকরা অনপ্রেম কাজ করছে ..) :)
বিআর, ওয়াই
উইন্ডোজ পরিষেবাগুলি সম্পন্ন না হওয়া পর্যন্ত আরও ধৈর্য চায়। এটিতে কিছুটা হার্ড ডিবাগ এবং ইনস্টল রয়েছে। এটা মুখহীন। আপনার যদি এমন কোনও কাজের প্রয়োজন হয় যা অবশ্যই প্রতি সেকেন্ড, মিনিট বা ঘন্টার মধ্যে করা উচিত, আপনার উইন্ডোজ পরিষেবাটি বেছে নেওয়া উচিত।
নির্ধারিত টাস্কটি দ্রুত বিকাশযুক্ত এবং একটি মুখ রয়েছে। আপনার যদি দৈনিক বা সাপ্তাহিক টাস্ক প্রয়োজন হয় তবে আপনি শিড্যুলড টাস্কটি ব্যবহার করতে পারেন।