it-swarm-tr.com

Durdur ve toplu iş veya cmd dosyasıyla bir hizmeti başlat?

Hata kontrolü ile bir hizmeti durdurmak ve başlatmak için nasıl bir yarasa veya cmd yazabilirim (veya ne sebeple olursa olsun başarılı olmadığını bana bildirir)?

264
Keng

SC (service control) komutunu kullanın, size sadece start & stop öğesinden çok daha fazla seçenek sunar.

 AÇIKLAMA:
 SC, .__ ile iletişim kurmak için kullanılan bir komut satırı programıdır. NT Servis Kontrolörü ve Servisleri .
 KULLANIM: 
 sc <sunucu> [komut] [servis adı] ...

 <server> seçeneği "\\ SunucuAdı" .__ şeklindedir. Komutlarla ilgili daha fazla yardım yazarak: "sc [komut]" 
 Komutlar: 
 query ----------- Bir hizmetin durumunu sorgular veya 
 hizmet türlerinin durumunu sıralar .
 queryex --------- Bir hizmet için uzatılmış durumu sorgular veya 
 hizmet türlerinin durumunu sıralar .
 start ----------- Bir servis başlatır .
 duraklama ----------- Bir servise bir DURAKLATMA kontrol isteği gönderir .
 interrogate ----- Bir servise bir INTERROGATE kontrol isteği gönderir .
 devam -------- Bir servise DEVAM kontrolü isteği gönderir .
 stop ------------ Bir servise DURDUR isteği gönderir .
 config ---------- Bir servisin konfigürasyonunu değiştirir (kalıcı) .
 açıklama ----- Bir hizmetin açıklamasını değiştirir .
 başarısızlık --------- Bir hizmet tarafından başarısızlık durumunda gerçekleştirilen eylemleri değiştirir .
 qc -------------- Bir servis için yapılandırma bilgilerini sorgular .
 qdescription ---- Bir hizmetin açıklamasını sorgular .
 qfailure -------- Bir hizmet tarafından başarısızlık durumunda gerçekleştirilen eylemleri sorgular. delete ---------- Bir hizmeti siler (kayıt defterinden) .
 create ---------- Bir hizmet oluşturur. (kayıt defterine ekler) .
 control --------- Bir servise kontrol gönderir .
 sdshow ---------- Bir servisin güvenlik tanımlayıcısını görüntüler. sdset ----------- Bir servisin güvenlik tanımlayıcısını ayarlar .
 GetDisplayName - Bir hizmet için DisplayName değerini alır .
 GetKeyName ------ Bir hizmet için ServiceKeyName değerini alır .
 EnumDepend ------ Hizmet Bağımlılıklarını Numaralandırır .

 Aşağıdaki komutlar bir servis adı gerektirmez: 
 sc <server> <komut> <option> 
 boot ------------ (tamam | kötü) Son açılışın yapılıp yapılmayacağını gösterir. son bilinen iyi önyükleme yapılandırması olarak kaydedilebilir. Kilitle ------------ Servis Veritabanını kilitler. QueryLock ------- SCManager Veritabanı .__ için LockStatus'u sorgular. ÖRNEK:
 sc MyService .__ 'u başlatın.
326
Ferruccio
net start [serviceName]

ve

net stop [serviceName]

açıkça başarılı veya başarısız olduklarını söyleyin. Örneğin

U:\>net stop alerter
The Alerter service is not started.

More help is available by typing NET HELPMSG 3521.

Bir toplu iş dosyasından çalıştırıyorsanız, dönüş kodunun ERRORLEVEL'sine erişebilirsiniz. 0 başarıyı gösterir. Daha yüksek olan herhangi bir şey başarısızlığı gösterir.

Bir yarasa dosyası olarak, error.bat:

@echo off
net stop alerter
if ERRORLEVEL 1 goto error
exit
:error
echo There was a problem
pause

Çıktı şöyle görünür:

U:\>error.bat
The Alerter service is not started.

More help is available by typing NET HELPMSG 3521.

There was a problem
Press any key to continue . . .

Dönüş Kodları

 - 0 = Success
 - 1 = Not Supported
 - 2 = Access Denied
 - 3 = Dependent Services Running
 - 4 = Invalid Service Control
 - 5 = Service Cannot Accept Control
 - 6 = Service Not Active
 - 7 = Service Request Timeout
 - 8 = Unknown Failure
 - 9 = Path Not Found
 - 10 = Service Already Running
 - 11 = Service Database Locked
 - 12 = Service Dependency Deleted
 - 13 = Service Dependency Failure
 - 14 = Service Disabled
 - 15 = Service Logon Failure
 - 16 = Service Marked For Deletion
 - 17 = Service No Thread
 - 18 = Status Circular Dependency
 - 19 = Status Duplicate Name
 - 20 = Status Invalid Name
 - 21 = Status Invalid Parameter 
 - 22 = Status Invalid Service Account
 - 23 = Status Service Exists
 - 24 = Service Already Paused

Düzenle 20.04.2015

İade Kodları: 

NET komutu belgelenmiş Win32_Service sınıfı dönüş kodlarını (Servis Aktif Değil, Servis İsteği Zaman Aşımı vb.) Döndürmez ve birçok hata için yalnızca Hata Seviyesi 2'yi döndürür.

Buraya bakın: http://ss64.com/nt/net_service.html

193
Bill Michell

NET START komutunu kullanabilir ve ardından ERRORLEVEL ortam değişkenini kontrol edebilirsiniz, örn.

net start [your service]
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%

Yasal Uyarı: Bunu başımın üstünden yazdım, ancak işe yarayacağını düşünüyorum.

27
Jonas Gulle

Kodları kontrol etmek yerine, bu da işe yarıyor

net start "Apache Tomcat" || goto ExitError

:End  
exit 0  

:ExitError  
echo An error has occurred while starting the Tomcat services  
exit 1  
8
vanval

Bunun için kişisel toplu iş dosyamı oluşturdum, benimki biraz farklı ama uygun gördüğünüz gibi değiştirmekten çekinmeyin .. Bitirmeyi, başlatmayı, durdurmayı veya otomatik ayarlamayı girebiliyor. Bu BAT dosyası sadece servis adını girmenizi ister ve gerisini sizin için halleder. Hata bildiren bir şey aradığının farkında değildim, o kısmı yanlış okumuş olmalıyım. Tipik olarak bu, satırın sonuna >> output.txt girilerek yapılabilir. 

% Var%, farklı bir servisi başlatmak/durdurmak istediğinizde yarasa dosyasını değiştirmek zorunda kalmak yerine, kullanıcının kendi hizmetini bu şekilde girebilmesi için bir yoldur. 

Eğer hatalıysam, herkes bu konuda beni düzeltmekte özgür olabilir. 

@echo off
set /p c= Would you like to start a service [Y/N]?
  if /I "%c%" EQU "Y" goto :1
  if /I "%c%" EQU "N" goto :2
    :1  
    set /p var= Service name: 
:2 
set /p c= Would you like to stop a service [Y/N]?
  if /I "%c%" EQU "Y" goto :3
  if /I "%c%" EQU "N" goto :4
    :3  
    set /p var1= Service name:
:4
set /p c= Would you like to disable a service [Y/N]?
  if /I "%c%" EQU "Y" goto :5
  if /I "%c%" EQU "N" goto :6
    :5  
    set /p var2= Service name:
:6 
set /p c= Would you like to set a service to auto [Y/N]?
  if /I "%c%" EQU "Y" goto :7
  if /I "%c%" EQU "N" goto :10
    :7  
    set /p var3= Service name:
:10
sc start %var%
sc stop %var1%
sc config %var2% start=disabled
sc config %var3% start=auto
7
Nathanial Wilson

net start ve net stop öğelerinin dönüş kodlarını kullanmak bana en iyi yöntem gibi görünüyor. Şuna bir bakmayı deneyin: Net Start dönüş kodları .

6
ZombieSheep

Sözdizimi her zaman beni alır .... yani ...

Her iki makinede de bir yönetici iseniz, .bat'ı bir yönetici olarak çalıştırdığınızda ve makineler aynı etki alanındaysa, uzak bir hizmeti (başka bir makinede) öldürecek bir toplu iş dosyasına nasıl satır ekleneceği açıkça açıklanmaktadır. Makine adı UNC formatını takip ediyor\myserver

sc \\ip.ip.ip.ip stop p4_1

Bu durumda ... p4_1, Servis Yöneticisi'nde servisin özelliklerini görüntülediğinizde, hem Servis Adı hem de Görünen Addı. Servis Adı'nı kullanmanız gerekir.

Servis Ops bağımlıları için ... sebep kodunu ve yorumunu eklediğine emin ol! yani 'Planlanan' eşittir 'yorum 4' ve 'Bakım için sunucuyu durdurma'

sc \\ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance
5
ATSiem

"Net stop" un servisi durduracağını düşünmek isteriz. Ne yazık ki, gerçeklik o siyah ve beyaz değil. Hizmetin durması uzun sürerse, hizmet durmadan önce komut geri dönecektir. Yine de, hata seviyesini kontrol etmediğiniz sürece bilemezsiniz.

Çözüm, durdurulana kadar hizmetin durumunu araştırarak döngüdeymiş gibi görünüyor, her döngüde duraklama ile.

Ama sonra tekrar...

İlk hizmetin durmasının uzun zaman aldığını ve ardından bir sonraki servis için "net stop" un hiçbir şey yapmadan göründüğünü görüyorum. Servis yöneticisinde servise bakın ve durumu hala "Başlatıldı" - "Durdurma" ayarında değişiklik yok. Yine de bu ikinci servisi SCM kullanarak manuel olarak durdurabilirim ve 3 veya 4 saniye içinde durur.

4
DaveH

veya uzaktan servisi bu cmd ile başlatabilirsiniz: sc \\<computer> start <service>

3
onionpsy

El ile servis yeniden başlatma işlemi tamamdır - services.msc'de "Yeniden Başlat" düğmesi bulunur, ancak komut satırında hem sc hem de net komutlar "yeniden başlat" anahtarına sahip değildir ve yeniden başlatma işlemi cmd/bat dosyasında programlanmışsa, servis hemen durdurulur ve başlatılır, bazen Servis hala durmadığı için hata alıyor, işleri kapatmak için biraz zamana ihtiyacı var. 

Bu bir hata oluşturabilir: Sc stop Sc start 

Zaman aşımı eklemek iyi bir fikirdir, ping kullanıyorum (her 1 saniyede ping): Sc stop Ping localhost -n 60sc start 

2
Kuleris

Sadece Jonas'ın yukarıdaki örneğini kullandım ve 0 - 24 hata seviyesinin tam listesini oluşturdum. Diğer gönderi, net start ve net stop öğelerinin yalnızca başarı için errorlevel 0, başarısızlık için 2 kullandığı doğru.

Ama bu benim için çalıştı.

net stop postgresql-9.1
if %errorlevel% == 2 echo Access Denied - Could not stop service
if %errorlevel% == 0 echo Service stopped successfully
echo Errorlevel: %errorlevel%

stop öğesini start olarak değiştirin ve tersten çalışır.

2
Clinton

SC hizmetleriyle her şeyi yapabilir ... başlat, durdur, kontrol et, yapılandır ve daha fazlası ... 

1
Axeman

Bazen durağın işe yaramadığını görebilirsiniz. 

SQlServer bazen bunu yapıyor. Aşağıdaki komut satırını kullanarak onu öldürür. Senaryosuna gerçekten ihtiyacın varsa durmayan şeyleri öldürmek için. Bunu son çare olarak yapmasını isterdim

taskkill /pid [pid number] /f
1
andrew pate

İşte toplu iş kullanarak Sistem Geri Yükleme'yi başlatmak için Windows 10 komutudur:

sc config swprv start= Auto

Bu komutları da beğenebilirsiniz:

  • Sistem geri yükleme işlemini otomatik olarak başlatmak için kayıt defteri değerini değiştirin

    REG EKLE "HKLM\YAZILIM\Microsoft\Windows NT\CurrentVersion\SystemRestore"/v Devre Dışı BırakınSR/t REG_DWORD/d 0/f

  • Sistem geri yükleme noktası oluşturma

    Wmic.exe/Ad Alanı:\root\default Yol SystemRestore Call CreateRestorePoint "djibe PC'nizi kaydetti", 100, 12

  • Sistem Geri Yükleme disk kullanımını değiştir

    vssadmin shadowstorage yeniden boyutlandırmak/için = C:/açık = C:/maxsize = 10%

Keyfini çıkarın

1
djibe

Bir Windows servisini C # ile yazıyorum, stop/uninstall/build/install/start döngüsü çok yorucu oldu. Döngüyü otomatik hale getirmek için reploy.bat olarak adlandırılan ve Visual Studio çıktı dizinime (yerleşik hizmeti çalıştırılabilir olanı olan) bıraktı. 

Sadece bu 3 değişkeni ayarlayın 

servicename: bu, Windows Servis kontrol panelinde (services.msc) görünür.

slndir: çözüm (.sln) dosyanızı içeren klasör (tam yol değil)

binpath: derlemeden yürütülebilir hizmetin tam yolu (klasör yolu değil)

NOT: msbuild komutunun çalışması için Visual Studio Geliştirici Komut Satırından çalıştırılması gerekir.

SET servicename="My Amazing Service"
SET slndir="C:dir\that\contains\sln\file"
SET binpath="C:path\to\service.exe"
SET currdir=%cd%

call net stop %servicename%
call sc delete %servicename%
cd %slndir%
call msbuild 
cd %bindir%
call sc create %servicename% binpath=%binpath%
call net start %servicename%
cd %currdir%

Belki bu birine yardımcı olur :)

0
sh87