banner



How To Start Or Stop A Service In Batch File

Berhenti dan Mulai layanan melalui file batch atau cmd?


Bagaimana saya bisa skrip kelelawar atau cmd untuk berhenti dan memulai layanan andal dengan pengecekan kesalahan (atau beri tahu saya bahwa itu tidak berhasil karena alasan apa pun)?


Jawaban:


Gunakan perintah SC(kontrol layanan), ini memberi Anda lebih banyak opsi daripada hanya start& stop.

                DESKRIPSI:           SC adalah program baris perintah yang digunakan untuk berkomunikasi dengan           Pengontrol Layanan NT dan layanan.   PEMAKAIAN:       sc <server> [perintah] [nama layanan] ...        Opsi <server> memiliki bentuk "\\ ServerName"       Bantuan lebih lanjut tentang perintah dapat diperoleh dengan mengetik: "sc [command]"       Perintah:         permintaan ----------- Menanyakan status layanan, atau                         menyebutkan status untuk jenis layanan.         queryex --------- Permintaan status diperluas untuk layanan, atau                         menyebutkan status untuk jenis layanan.         mulai ----------- Memulai layanan.         jeda ----------- Mengirim permintaan kontrol PAUSE ke layanan.         menginterogasi ----- Mengirim permintaan kontrol INTERROGATE ke layanan.         lanjutkan -------- Mengirim permintaan kontrol LANJUTKAN ke layanan.         berhenti ------------ Mengirim permintaan STOP ke layanan.         config ---------- Mengubah konfigurasi layanan (persisten).         description ----- Mengubah deskripsi layanan.         kegagalan --------- Mengubah tindakan yang diambil oleh layanan setelah kegagalan.         qc -------------- Menanyakan informasi konfigurasi untuk layanan.         qdescription ---- Menanyakan deskripsi untuk layanan.         qfailure -------- Menanyakan tindakan yang dilakukan oleh layanan setelah kegagalan.         hapus ---------- Menghapus layanan (dari registri).         buat ---------- Membuat layanan. (menambahkannya ke registri).         control --------- Mengirim kontrol ke layanan.         sdshow ---------- Menampilkan deskriptor keamanan layanan.         sdset ----------- Menetapkan deskriptor keamanan layanan.         GetDisplayName - Mendapat DisplayName untuk layanan.         GetKeyName ------ Mendapat ServiceKeyName untuk layanan.         EnumDepend ------ Menghitung Ketergantungan Layanan.        Perintah berikut ini tidak memerlukan nama layanan:       sc <server> <command> <option>         boot ------------ (ok | buruk) Menunjukkan apakah booting terakhir harus                         disimpan sebagai konfigurasi boot terakhir yang dikenal baik         Kunci ------------ Mengunci Database Layanan         QueryLock ------- Menanyakan LockStatus untuk Database SCManager   CONTOH:           sc mulai MyService              






                net start [serviceName]                              

dan

                net stop [serviceName]                              

memberi tahu Anda apakah mereka berhasil atau gagal dengan cukup jelas. Sebagai contoh

                U:\>net stop alerter The Alerter service is not started.  More help is available by typing NET HELPMSG 3521.                              

Jika dijalankan dari file batch, Anda memiliki akses ke ERRORLEVEL dari kode kembali. 0 menunjukkan kesuksesan. Apa pun yang lebih tinggi mengindikasikan kegagalan.

Sebagai file bat, error.bat:

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

Outputnya terlihat seperti ini:

                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 . . .                              

Kembalikan Kode

                                  - 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                              

Sunting 20.04.2015

Kembali kode:

Perintah NET tidak mengembalikan kode pengembalian kelas Win32_Service yang terdokumentasi (Layanan Tidak Aktif, Timeout Permintaan Layanan, dll.) Dan untuk banyak kesalahan hanya akan mengembalikan Errorlevel 2.

Lihat di sini: http://ss64.com/nt/net_service.html





Anda dapat menggunakan perintah NET START dan kemudian memeriksa variabel lingkungan ERRORLEVEL, misalnya

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

Penafian: Saya sudah menulis ini dari atas kepala saya, tetapi saya pikir itu akan berhasil.


Alih-alih memeriksa kode, ini juga berfungsi

              net start "Apache tomcat" || goto ExitError  :End   exit 0    :ExitError   echo An error has occurred while starting the tomcat services   exit 1                          

Saya telah membuat file batch pribadi saya untuk ini, milik saya sedikit berbeda tetapi merasa bebas untuk memodifikasi sesuai keinginan Anda. Saya membuat ini beberapa waktu yang lalu karena saya bosan dan ingin membuat cara sederhana agar orang dapat memasukkan akhir, mulai, berhenti, atau pengaturan ke otomatis. File BAT ini hanya meminta Anda memasukkan nama layanan dan akan melakukan sisanya untuk Anda. Saya tidak menyadari bahwa dia sedang mencari sesuatu yang menyatakan kesalahan, saya pasti salah membaca bagian itu. Meskipun biasanya ini dapat dilakukan dengan memasukkan >> output.txt pada akhir baris.

% Var% hanyalah cara bagi pengguna untuk dapat memasukkan layanan mereka sendiri ke dalam ini, alih-alih harus memodifikasi file bat setiap kali Anda ingin memulai / menghentikan layanan yang berbeda.

Jika saya salah, siapa pun dapat merasa bebas untuk memperbaiki saya dalam hal ini.

                @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                              




Sintaks selalu membuatku .... jadi ...

Di sini secara eksplisit cara menambahkan baris ke file batch yang akan mematikan layanan jarak jauh (di komputer lain) jika Anda seorang admin di kedua mesin, jalankan .bat sebagai administrator, dan mesin berada di domain yang sama. Nama mesin mengikuti format UNC \ myserver

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

Dalam hal ini ... p4_1 adalah Nama Layanan dan Nama Tampilan, saat Anda melihat Properti untuk layanan di Manajer Layanan. Anda harus menggunakan Nama Layanan.

Untuk pecandu Layanan Ops Anda ... pastikan untuk menambahkan kode alasan dan komentar Anda! yaitu '4' yang sama dengan 'Direncanakan' dan komentar 'Menghentikan server untuk pemeliharaan'

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



Kami ingin berpikir bahwa "stop net" akan menghentikan layanan. Sayangnya, kenyataan tidak hitam dan putih. Jika layanan membutuhkan waktu lama untuk berhenti, perintah akan kembali sebelum layanan berhenti. Anda tidak akan tahu, kecuali Anda memeriksa tingkat kesalahan.

Solusinya tampaknya untuk loop mencari kondisi layanan sampai dihentikan, dengan jeda setiap kali putaran loop.

Tapi sekali lagi ...

Saya melihat layanan pertama membutuhkan waktu yang lama untuk berhenti, kemudian "penghentian bersih" untuk layanan selanjutnya tampaknya tidak melakukan apa pun. Lihatlah layanan di manajer layanan, dan kondisinya masih "Memulai" - tidak ada perubahan menjadi "Berhenti". Namun saya dapat menghentikan layanan kedua ini secara manual menggunakan SCM, dan berhenti dalam 3 atau 4 detik.


atau Anda dapat memulai layanan jarak jauh dengan cmd ini: sc \\<computer> start <service>


Saya baru saja menggunakan contoh Jonas di atas dan membuat daftar lengkap 0 hingga 24 tingkat kesalahan. Posting lain benar net startdan net stophanya menggunakan errorlevel0 untuk sukses dan 2 untuk kegagalan.

Tetapi inilah yang berhasil bagi saya:

              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%                          

Ubah stopke startdan bekerja secara terbalik.


Restart layanan manual ok - service.msc memiliki tombol "Restart", tetapi dalam baris perintah perintah sc dan net tidak memiliki sakelar "restart" dan jika restart dijadwalkan dalam file cmd / bat, layanan dihentikan dan mulai segera, kadang-kadang mendapat kesalahan karena layanan belum berhenti, perlu waktu untuk mematikannya.

Ini dapat menghasilkan kesalahan: sc stop sc start

Adalah ide bagus untuk menyisipkan batas waktu, saya menggunakan ping (ping setiap 1 detik): sc stop ping localhost -n 60 sc start


Berikut adalah perintah Windows 10 untuk memulai Pemulihan Sistem menggunakan batch:

              sc config swprv start= Auto                          

Anda mungkin juga menyukai perintah-perintah itu:

  • Ubah nilai registri untuk secara otomatis memulai Pemulihan sistem

    REG TAMBAHKAN "HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ SystemRestore" / v DisableSR / t REG_DWORD / d 0 / f

  • Buat titik pemulihan sistem

    Wmic.exe / Namespace: \ root \ default Path SystemRestore Call CreateRestorePoint "djibe menyelamatkan PC Anda", 100, 12

  • Ubah Pemulihan Sistem penggunaan disk

    vssadmin mengubah ukuran shadowstorage / for = C: / on = C: / maxsize = 10%

Nikmati


SC dapat melakukan segalanya dengan layanan ... mulai, berhenti, periksa, konfigurasikan, dan lainnya ...


Kadang-kadang Anda dapat menemukan berhenti tidak berfungsi ..

SQlServer saya terkadang melakukan ini. Menggunakan baris perintah berikut akan membunuhnya. Jika Anda benar-benar membutuhkan skrip Anda untuk membunuh hal-hal yang tidak berhenti. Saya ingin ini melakukan ini sebagai pilihan terakhir

              taskkill /pid [pid number] /f                          

Saya menulis layanan windows di C #, loop stop / uninstall / build / install / start terlalu melelahkan. Menulis skrip mini, menyebutnya reploy.batdan menjatuhkannya di direktori output Visual Studio saya (yang memiliki layanan dibangun yang dapat dieksekusi) untuk mengotomatiskan loop.

Cukup atur 3 vars ini

servicename : ini muncul di panel kontrol Layanan Windows (services.msc)

slndir : folder (bukan path lengkap) yang berisi file solution (.sln) Anda

binpath : path lengkap (bukan path folder) ke layanan yang dapat dieksekusi dari build

CATATAN: Ini perlu dijalankan dari Baris Perintah Pengembang Visual Studio agar msbuildperintah berfungsi.

              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%                          

Mungkin ini membantu seseorang :)

How To Start Or Stop A Service In Batch File

Source: https://qastack.id/programming/133883/stop-and-start-a-service-via-batch-or-cmd-file

Posted by: fontenotcombes.blogspot.com

0 Response to "How To Start Or Stop A Service In Batch File"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel