Saya ingin menulis file batch yang melakukan operasi berikut:
- Periksa apakah layanan sedang berjalan
- Jika sedang berjalan, keluar dari batch
- Jika tidak berjalan, mulai layanan
Sampel kode yang saya cari di Google sejauh ini ternyata tidak berfungsi, jadi saya memutuskan untuk tidak mempostingnya.
Memulai layanan dilakukan oleh:
net start "SERVICENAME"
- Bagaimana saya bisa memeriksa apakah sebuah layanan sedang berjalan, dan bagaimana membuat pernyataan if di batchfile?
- Saya sedikit bingung. Apa argumen yang harus saya sampaikan ke net start? Nama layanan atau nama tampilannya?
Jawaban:
Untuk memeriksa status layanan, gunakan
sc query <SERVICE_NAME>
. Untuk if memblokir dalam file batch, periksa dokumentasi .Kode berikut akan memeriksa status layanan
MyServiceName
dan memulainya jika tidak berjalan (blok if akan dijalankan jika layanan tidak berjalan):Penjelasan tentang apa yang dilakukannya:
Adapun pertanyaan kedua Anda, argumen yang ingin Anda sampaikan
net start
adalah nama layanan, bukan nama tampilan.sumber
sc query "SCardSvr"
dari baris perintah?Untuk beralih layanan gunakan yang berikut ini;
sumber
||
sebenarnya adalahOR
operator, meskipun dalam hal ini secara fungsional merupakanELSE
pernyataan. Ini adalah perbedaan yang halus, tetapi penting. Masih mendapat +1 saya - Saya melakukan ini sepanjang waktu di skrip shell Unix / Linux, tidak tahu mengapa saya tidak pernah berpikir untuk melakukan ini di batch Windows.Anda dapat menggunakan perintah berikut untuk melihat apakah layanan sedang berjalan atau tidak:
Ketika saya menjalankannya untuk NOD32 Antivirus saya, saya mendapatkan:
Jika dihentikan, saya akan mendapatkan:
Anda dapat menggunakan ini dalam variabel untuk kemudian menentukan apakah Anda menggunakan NET START atau tidak.
Nama layanan harus nama layanan, bukan nama tampilan.
sumber
Itu harus melakukannya:
sumber
Versi bahasa independen.
sumber
Set ServiceName=Jenkins
denganSet ServiceName=%~1
dan sebut saja sepertiwatch-service.bat "Jenkins"
Saya baru saja menemukan utas ini dan ingin menambahkan ke diskusi jika orang tersebut tidak ingin menggunakan file batch untuk memulai ulang layanan. Di Windows ada opsi jika Anda pergi ke Layanan, properti layanan, lalu pemulihan. Di sini Anda dapat mengatur parameter untuk layanan. Ingin memulai ulang layanan jika layanan berhenti. Selain itu, Anda bahkan dapat melakukan upaya gagal kedua untuk melakukan sesuatu yang berbeda seperti saat memulai ulang komputer.
sumber
Gunakan Windows en Español, el código debe quedar asi (bila menggunakan Windows dalam bahasa Spanyol, kodenya adalah):
Reemplazar MYSERVICE con el nombre del servicio que se desea procesar. Puedes ver el nombre del servicio viendo las propiedades del servicio. (Ganti MYSERVICE dengan nama layanan yang akan diproses. Anda dapat melihat nama layanan pada properti layanan.)
sumber
sumber
Untuk Windows server 2012 di bawah ini yang berhasil untuk saya. Ganti hanya "SERVICENAME" dengan nama layanan yang sebenarnya:
sumber
Saya juga ingin email dikirim jika layanan dimulai dengan cara ini jadi tambahkan sedikit ke kode @Ic hanya berpikir saya akan mempostingnya jika itu membantu siapa pun. Saya menggunakan SendMail tetapi ada opsi baris perintah lain Bagaimana cara mengirim email sederhana dari file batch Windows?
sumber
Memulai Layanan menggunakan skrip Powershell. Anda dapat menautkan ini ke penjadwal tugas dan memicunya pada interval atau sesuai kebutuhan. Buat ini sebagai file yaitu file PS1 dengan ekstensi PS1 dan kemudian biarkan file ini dipicu dari penjadwal tugas.
Untuk memulai menghentikan layanan
di penjadwal tugas jika Anda menggunakannya di server, gunakan ini dalam argumen
-noprofile -executionpolicy bypass -file "C: \ Service Restart Scripts \ StopService.PS1"
verifikasi dengan menjalankan yang sama pada cmd jika berhasil, itu harus bekerja pada penjadwal tugas juga
sumber
sumber
Terkait jawaban oleh @DanielSerrano, saya baru-baru ini digigit oleh lokalisasi
sc.exe
perintahnya, yaitu dalam bahasa Spanyol. Proposal saya adalah untuk menunjukkan dengan tepat garis dan token yang memegang status layanan numerik dan menafsirkannya, yang seharusnya jauh lebih kuat:Diuji dengan:
sumber
Mungkin cara yang lebih sederhana? Hanya menambah daftar jawaban di sini:
sumber