ব্যাচ ফাইলের মাধ্যমে কোনও পরিষেবা চলছে কিনা তা পরীক্ষা করে কীভাবে এটি চালু না করা যায়?


91

আমি একটি ব্যাচ ফাইল লিখতে চাই যা নিম্নলিখিত ক্রিয়াকলাপ সম্পাদন করে:

  • কোনও পরিষেবা চলছে কিনা তা পরীক্ষা করে দেখুন
    • যদি এটি চলছে তবে ব্যাচটি ছেড়ে দিন
    • যদি এটি চলমান না থাকে তবে পরিষেবাটি শুরু করুন

আমি এতক্ষণে যে কোড নমুনাগুলি সংগ্রহ করেছি সেগুলি কাজ না করে দেখা গেল, তাই আমি সেগুলি পোস্ট না করার সিদ্ধান্ত নিয়েছি।

একটি পরিষেবা শুরু করার দ্বারা সম্পন্ন হয়:

net start "SERVICENAME"
  1. কোনও পরিষেবা চলছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি এবং ব্যাচফাইলে কীভাবে একটি বিবৃতি দিতে পারি?
  2. আমি কিছুটা বিভ্রান্ত। নেট শুরুতে আমাকে কী যুক্তি দিতে হবে? সেবার নাম নাকি এর প্রদর্শনের নাম?

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

@ পিটার শোয়েজ: হ্যাঁ, পরিষেবাটি শুরু করার একমাত্র উদ্দেশ্য হলে আপনার আপত্তিটি সঠিক। আমি লগিং শুরু এবং cetera অন্তর্ভুক্ত, তাই আমি এলসি সমাধান সঙ্গে স্টিক।
সিট্রোনাস

উত্তর:


164

কোনও পরিষেবার স্থিতি পরীক্ষা করতে, ব্যবহার করুন sc query <SERVICE_NAME>। যদি ব্যাচ ফাইলগুলিতে ব্লক হয় তবে ডকুমেন্টেশন পরীক্ষা করুন

নিম্নলিখিত কোডটি পরিষেবার স্থিতি পরীক্ষা করে MyServiceNameএটি চালু না থাকলে এটি শুরু করবে (যদি পরিষেবাটি চালু না থাকে তবে ব্লকটি কার্যকর করা হবে):

for /F "tokens=3 delims=: " %%H in ('sc query "MyServiceName" ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   REM Put your code you want to execute here
   REM For example, the following line
   net start "MyServiceName"
  )
)

এটি কী করে তার ব্যাখ্যা:

  1. পরিষেবার বৈশিষ্ট্যগুলি অনুসন্ধান করে।
  2. "স্টেট" পাঠ্যটি সহ রেখার সন্ধান করুন
  3. এই লাইনটি টোকেনাইজ করে এবং তৃতীয় টোকেনটি বের করে, যা সেবার স্থিতিগুলির সাথে যুক্ত রয়েছে।
  4. "চলমান" স্ট্রিংয়ের বিপরীতে ফলাফলের ফলাফল পরীক্ষা করে

আপনার দ্বিতীয় প্রশ্নের জন্য হিসাবে, যুক্তি আপনাকে পাস করতে চাইবেন net startপরিষেবার নাম হল না প্রদর্শন নাম।


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

ওহো আমার সেখানে প্রথম লাইনে কিছু বাড়তি জিনিস ছিল ... এটি চেষ্টা করে দেখুন। এবং যদি এটি কাজ করে না, আপনি যখন sc query "SCardSvr"একটি কমান্ড লাইন থেকে চালাবেন তখন কি হবে ?
এলসি

4
আপনার কি উদ্ধৃতিগুলিতে "SCardSvr" আছে? আমি বিশ্বাস করি না এটি হওয়া উচিত,
লিটলববি টেবিলগুলি - এটু রেভায়ার

@ লিটলববির টেবিল: আপনি ঠিক বলেছেন। উদ্ধৃতি ছাড়া এটি কাজ করে। আমি এত বোকা: - | আপনার সাহায্যের জন্য ধন্যবাদ
citronas

@ মার্ক ভাল নোট। আমি অনুমান করি যে টার্গেট ওএস ভাষার জন্য যা প্রয়োজন তা দিয়ে আপনাকে স্ট্রিংটি প্রতিস্থাপন করতে হবে। আমিও "চলমান" ধরে নিই।
এলসি

34

কোনও পরিষেবা টগল করতে নিম্নলিখিতগুলি ব্যবহার করুন;

নেট শুরু "বিতরণ লেনদেন সমন্বয়কারী" || নেট স্টপ "বিতরণ লেনদেন সমন্বয়কারী"


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

4
কমান্ডটি এমনভাবে কাঠামোযুক্ত করা হয়েছে যে নেট শুরু করতে ব্যর্থ হলে, এটি তখন এটি বন্ধ করে দেয় (যার ফলে || যার অর্থ অন্যথায়), তবে নেট শুরু হলে চালানো যায় না, তবে নেট স্টপটি কার্যকর হয় না। উজ্জ্বল!
ডক্টর ডস

4
এটি আমার মতে সেরা উত্তর, এবং সম্ভবত @ সিট্রোনাসকে এটিকে গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত করা উচিত: সহজ, স্মার্ট এবং মার্জিত এবং স্ট্যাকওভারফ্লোয়ের মতো সাইটে ফিট করে। এটাকে সহজ করো!
সোপালাজো ডি অ্যারিরিজ

4
না nitpicky (ঠিক আছে, হয়তো শুধু একটু) হতে কিন্তু ||আসলে একটি হয় OR, অপারেটর যদিও এই ক্ষেত্রে এটা বৈশিষ্ট্যগুলি একটি ELSEবিবৃতি। এটি একটি সূক্ষ্ম, তবে গুরুত্বপূর্ণ পার্থক্য। তবুও আমার +1 পেয়েছে - আমি ইউনিক্স / লিনাক্স শেল স্ক্রিপ্টিং-এ সমস্ত সময় এটি করি, কেন জানি না যে আমি কখনই উইন্ডোজ ব্যাচে এটি করার চিন্তা করিনি।
ডগ আর।

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

20

কোনও পরিষেবা চলছে কিনা তা আপনি নীচের কমান্ডটি ব্যবহার করতে পারেন:

sc query [ServiceName] | findstr /i "STATE"

আমি যখন এটি আমার এনওডি 32 অ্যান্টিভাইরাসটির জন্য চালনা করি তখন আমি পাই:

STATE                       : 4 RUNNING

যদি এটি বন্ধ করা হয় তবে আমি পেতাম:

STATE                       : 1 STOPPED

আপনি এটি কোনও চলকটিতে ব্যবহার করতে পারেন তারপরে আপনি নেট শুরু ব্যবহার করেন কিনা তা নির্ধারণ করতে।

পরিষেবার নামটি পরিষেবার নাম হওয়া উচিত, প্রদর্শনের নাম নয়।


4
আপনার সহায়তার জন্য ধন্যবাদ, আপনি যা পোস্ট করেছেন তা সংহত করার চেষ্টা করার সময় আমি আমার ব্যাচের দক্ষতা অনেক বাড়িয়েছি;)
সিট্রোনাস


12

ভাষা স্বাধীন সংস্করণ।

@Echo Off
Set ServiceName=Jenkins


SC queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">Nul&&(
    echo %ServiceName% not running 
    echo Start %ServiceName%

    Net start "%ServiceName%">nul||(
        Echo "%ServiceName%" wont start 
        exit /b 1
    )
    echo "%ServiceName%" started
    exit /b 0
)||(
    echo "%ServiceName%" working
    exit /b 0
)

হ্যাঁ! "স্পেস" সর্বদা হঠাৎ আপনার পিঠে আঘাত করে!
ডকিল

4
প্রায় নিখুঁত উত্তর। আমি কেবল এই লাইনে ফিক্স করেছি: নেট শুরু "% সার্ভিসনেম%"> নুল || (
সিজার

আমি স্ক্রিপ্টটি সর্বজনীন তৈরি করেছি যাতে এটি আমাকে উইন্ডোজ শিডিউলার কার্যগুলিতে ব্যবহার করতে দেয়। শুধু প্রতিস্থাপন Set ServiceName=Jenkinsসঙ্গে Set ServiceName=%~1ও এর মত কলwatch-service.bat "Jenkins"
Dr.eel

@ Ant_222 এটি 'ক্যোয়ারি'র পরিবর্তে' কোয়েরেক্স 'ব্যবহার করে যা ভাষা নির্ভর। এবং আপনি কেন এটি উইন্ডোজ ব্যাচ না বলে মনে করেন? আপনি এটি ব্যবহার করার চেষ্টা করেছেন?
ডাঃ শীল

5

আমি এই থ্রেডটি সবেমাত্র পেয়েছি এবং সেই ব্যক্তি যদি পরিষেবাগুলি পুনরায় চালু করতে কোনও ব্যাচের ফাইল ব্যবহার করতে না চায় তবে আলোচনায় যুক্ত করতে চেয়েছিলাম। উইন্ডোজে একটি বিকল্প রয়েছে যদি আপনি পরিষেবাদি, পরিষেবার বৈশিষ্ট্য এবং তারপরে পুনরুদ্ধারে যান। এখানে আপনি পরিষেবার জন্য পরামিতি সেট করতে পারেন। পরিষেবা বন্ধ হলে পরিষেবাটি পুনরায় চালু করতে পছন্দ করুন Like এছাড়াও, কম্পিউটার পুনঃসূচনা করার মতো আপনি একটি দ্বিতীয় ব্যর্থ চেষ্টাও কিছু আলাদা করতে পারেন।


4
এটি একটি দরকারী উত্তর, তবে এটি লক্ষণীয় গুরুত্বপূর্ণ, এটি কেবল তখনই কাজ করবে যদি পরিষেবাটি প্রস্থান (-1) দিয়ে বন্ধ হয়ে যায়। যদি পরিষেবাটি কৌতূহলীভাবে বেরিয়ে আসে (ত্রুটির বার্তা সহ) অটো রিকভারটি ট্রিগার করবে না। যদি পরিষেবাটি ব্যবহারকারী দ্বারা ম্যানুয়ালি হত্যা করা হয় তবে এটি ট্রিগারও করবে না।
আর্ট গার্টনার

@ সেজলাইটনিং: এইভাবে চেষ্টা করার জন্য আমাদের অ্যাডমিন অ্যাক্সেস দরকার।
কুমার এম

@ আর্টগার্টনার - হত্যা (টাস্ক ম্যানেজারের মাধ্যমে) একটি পরিষেবাদি প্রক্রিয়াটিকে "ক্র্যাশ" হিসাবে ব্যাখ্যা করা হবে এবং পুনরুদ্ধারের সূচনা করবে।
মার্টিন বা

3

উইন্ডোজ এন এস্পাইওল ব্যবহার করুন, স্প্যানিশ উইন্ডোজ ব্যবহার করার সময় কোডটি হয়:

for /F "tokens=3 delims=: " %%H in ('sc query MYSERVICE ^| findstr "        ESTADO"') do (
  if /I "%%H" NEQ "RUNNING" (
    REM Put your code you want to execute here
    REM For example, the following line
    net start MYSERVICE
  )
)

রেমপ্লাজার MYSERVICE কন এল নাম্বার দেল সার্ভিসো কুই সে ডিসিয়া প্রসেসর। পুয়েডেস ভের এল নম্ব্রে দেল সার্ভিসিয়ো ভিয়েন্ডো লাস প্রোপিডেডস দেল সার্ভিসিয়ো। (প্রক্রিয়াজাত হওয়া পরিষেবার নামটি দিয়ে MYSERVICE প্রতিস্থাপন করুন service পরিষেবার বৈশিষ্ট্যগুলিতে আপনি পরিষেবার নাম দেখতে পারেন))


10
আপনি নিজের উত্তরটি ইংরেজিতে লিখলে প্রত্যেকের পক্ষে ভাল হবে better
j0k

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

4
@ এলসি: প্রতিটি ভাষার উত্তর অন্তর্ভুক্ত করা কি যুক্তিসঙ্গত হবে? এটি কোনও সংস্থার রেফারেন্স (বা অন্তর্ভুক্ত) করা আরও কার্যকর হতে পারে যা প্রদত্ত ভাষার জন্য কী স্ট্রিংটি অনুসন্ধান করবে তা বলে।
মাইক বেইলি

2
@echo off

color 1F


@sc query >%COMPUTERNAME%_START.TXT


find /I "AcPrfMgrSvc" %COMPUTERNAME%_START.TXT >nul

IF ERRORLEVEL 0 EXIT

IF ERRORLEVEL 1 NET START "AcPrfMgrSvc"

2

উইন্ডোজ সার্ভারের জন্য 2012 নীচে আমার জন্য কাজ করেছে। প্রকৃত পরিষেবার নামের সাথে কেবল "SERVICENAME" প্রতিস্থাপন করুন:

@ECHO OFF
SET SvcName=SERVICENAME

SC QUERYEX "%SvcName%" | FIND "STATE" | FIND /v "RUNNING" > NUL && (
    ECHO %SvcName% is not running 
    ECHO START %SvcName%

    NET START "%SvcName%" > NUL || (
        ECHO "%SvcName%" wont start 
        EXIT /B 1
    )
    ECHO "%SvcName%" is started
    EXIT /B 0
) || (
    ECHO "%SvcName%" is running
    EXIT /B 0
)

1

আমিও একটি ইমেল প্রেরণ চেয়েছিলাম যদি পরিষেবাটি এভাবে শুরু করা হয় তবে @ আইসি কোডে কিছুটা যুক্ত করা হয়েছিল কেবল ভেবেছিল এটি যদি কারও সাহায্য করে তবে আমি এটি পোস্ট করব। আমি সেন্ডমেল ব্যবহার করেছি তবে অন্যান্য কমান্ড লাইন অপশন রয়েছে উইন্ডোজ ব্যাচ ফাইল থেকে কীভাবে একটি সাধারণ ইমেল পাঠানো যায়?

set service=MyServiceName

for /F "tokens=3 delims=: " %%H in ('sc query %service% ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (

    net start %service%

    for /F "tokens=3 delims=: " %%H in ('sc query %service% ^| findstr "        STATE"') do (
      if /I "%%H" EQ "RUNNING" (
        SendMail /smtpserver localhost /to me@mydomain.com /from watchdog@mydomain.com /subject Service Autostart Notification /body Autostart on service %service% succeded.
      ) else (
        SendMail /smtpserver localhost /to me@mydomain.com /from watchdog@mydomain.com /subject Service Autostart Notification /body Autostart on service %service% failed.
      )
    )

  )
)

1

পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করে পরিষেবা শুরু করা হচ্ছে। আপনি এটি টাস্ক শিডিয়ুলারের সাথে লিঙ্ক করতে পারেন এবং বিরতিতে বা প্রয়োজনীয় হিসাবে এটি ট্রিগার করতে পারেন। এটি একটি পিএস 1 ফাইল হিসাবে তৈরি করুন অর্থাৎ এক্সটেনশন পিএস 1 সহ ফাইল এবং তারপরে এই ফাইলটিকে টাস্ক শিডিয়ুলার থেকে ট্রিগার করতে দিন।

স্টপ পরিষেবা শুরু করার জন্য

টাস্ক শিডিয়ুলারে যদি আপনি সার্ভারে এটি ব্যবহার করেন তবে এটি আর্গুমেন্টে ব্যবহার করুন

-নোপ্রোফাইল-এক্সিকিউশনপলিসি বাইপাস -ফাইল "সি: \ পরিষেবা পুনরায় আরম্ভ করুন স্ক্রিপ্টগুলি S স্টপসোর্সেস.পিএস 1"

এটি যদি টাস্ক শিডিয়ুলারেও কাজ করে তবে এটি সেমিডিতে চালিয়ে যাচাই করুন

$Password = "Enter_Your_Password"
$UserAccount = "Enter_Your_AccountInfor"
$MachineName = "Enter_Your_Machine_Name"
$ServiceList = @("test.SocketService","test.WcfServices","testDesktopService","testService")
$PasswordSecure = $Password | ConvertTo-SecureString -AsPlainText -Force
$Credential = new-object -typename System.Management.Automation.PSCredential -argumentlist $UserAccount, $PasswordSecure 

$LogStartTime = Get-Date -Format "MM-dd-yyyy hh:mm:ss tt"
$FileDateTimeStamp = Get-Date -Format "MM-dd-yyyy_hh"
$LogFileName = "C:\Users\krakhil\Desktop\Powershell\Logs\StartService_$FileDateTimeStamp.txt" 


#code to start the service

"`n####################################################################" > $LogFileName
"####################################################################" >> $LogFileName
"######################  STARTING SERVICE  ##########################" >> $LogFileName

for($i=0;$i -le 3; $i++)
{
"`n`n" >> $LogFileName
$ServiceName = $ServiceList[$i]
"$LogStartTime => Service Name: $ServiceName" >> $LogFileName

Write-Output "`n####################################"
Write-Output "Starting Service - " $ServiceList[$i]

"$LogStartTime => Starting Service: $ServiceName" >> $LogFileName
Start-Service $ServiceList[$i]

$ServiceState = Get-Service | Where-Object {$_.Name -eq $ServiceList[$i]}

if($ServiceState.Status -eq "Running")
{
"$LogStartTime => Started Service Successfully: $ServiceName" >> $LogFileName
Write-Host "`n Service " $ServiceList[$i] " Started Successfully"
}
else
{
"$LogStartTime => Unable to Stop Service: $ServiceName" >> $LogFileName
Write-Output "`n Service didn't Start. Current State is - "
Write-Host $ServiceState.Status
}
}

#code to stop the service

"`n####################################################################" > $LogFileName
"####################################################################" >> $LogFileName
"######################  STOPPING SERVICE  ##########################" >> $LogFileName

for($i=0;$i -le 3; $i++)
{
"`n`n" >> $LogFileName
$ServiceName = $ServiceList[$i]
"$LogStartTime => Service Name: $ServiceName" >> $LogFileName

Write-Output "`n####################################"
Write-Output "Stopping Service - " $ServiceList[$i]

"$LogStartTime => Stopping Service: $ServiceName" >> $LogFileName
Stop-Service $ServiceList[$i]

$ServiceState = Get-Service | Where-Object {$_.Name -eq $ServiceList[$i]}

if($ServiceState.Status -eq "Stopped")
{
"$LogStartTime => Stopped Service Successfully: $ServiceName" >> $LogFileName
Write-Host "`n Service " $ServiceList[$i] " Stopped Successfully"
}
else
{
"$LogStartTime => Unable to Stop Service: $ServiceName" >> $LogFileName
Write-Output "`nService didn't Stop. Current State is - "
Write-Host $ServiceState.Status
}
}

0
@Echo off

Set ServiceName=wampapache64

SC queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">Nul&&(

echo %ServiceName% not running
echo  

Net start "%ServiceName%"


    SC queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">Nul&&(
        Echo "%ServiceName%" wont start
    )
        echo "%ServiceName%" started

)||(
    echo "%ServiceName%" was working and stopping
    echo  

    Net stop "%ServiceName%"

)


pause

0

@ ড্যানিয়েলসেরানো এর উত্তরের সাথে সম্পর্কিত, sc.exeস্প্যানিশ ভাষায় কমান্ডটি স্থানীয়করণের মাধ্যমে আমি সম্প্রতি কিছুটা হলেও এসেছি । আমার প্রস্তাবটি লাইন এবং টোকেনটিকে পিন-পয়েন্ট করতে হবে যা সংখ্যাসূচক পরিষেবার স্থিতি রাখে এবং এর ব্যাখ্যা দেয়, যা আরও দৃ more় হওয়া উচিত:

@echo off

rem TODO: change to the desired service name
set TARGET_SERVICE=w32time

set SERVICE_STATE=
rem Surgically target third line, as some locales (such as Spanish) translated the utility's output
for /F "skip=3 tokens=3" %%i in ('""%windir%\system32\sc.exe" query "%TARGET_SERVICE%" 2>nul"') do (
  if not defined SERVICE_STATE set SERVICE_STATE=%%i
)
rem Process result
if not defined SERVICE_STATE (
  echo ERROR: could not obtain service state!
) else (
  rem NOTE: values correspond to "SERVICE_STATUS.dwCurrentState"
  rem https://msdn.microsoft.com/en-us/library/windows/desktop/ms685996(v=vs.85).aspx
  if not %SERVICE_STATE%==4 (
    echo WARNING: service is not running
    rem TODO: perform desired operation
    rem net start "%TARGET_SERVICE%"
  ) else (
    echo INFORMATION: service is running
  )
)

এর সাথে পরীক্ষিত:

  • উইন্ডোজ এক্সপি (32-বিট) ইংরেজি
  • উইন্ডোজ 10 (32-বিট) স্প্যানিশ
  • উইন্ডোজ 10 (64-বিট) ইংরেজি English

0

খুব সহজ উপায় হতে পারে? কেবলমাত্র উত্তরগুলির তালিকায় এখানে যুক্ত করুন:

@for /f "tokens=1,* delims=: " %%a in ('sc queryex state=Inactive') do net start "%%b"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.