Jalankan file batch sebagai layanan Windows

159

Untuk menjalankan satu aplikasi, file batch harus dimulai (yang melakukan hal-hal seperti memulai Jetty, menampilkan log langsung, dll). Aplikasi hanya akan berfungsi jika file batch ini berjalan. Karenanya saya terpaksa menjalankan file batch ini dan tidak logout dari server Windows.

Bisakah file batch ini dijalankan sebagai layanan? Saya bereksperimen dengan salah satu saran dari pertanyaan serupa .

publicRavi
sumber
27
Pemrograman batch adalah topik untuk Stack Exchange.
Harry Johnston
12
Pertanyaan bagus. +1. Moderator terlalu marah ... Saya juga punya jawaban yang bagus , tapi pertanyaannya sudah ditutup ((
gavenkoa
Saya menggunakan RunAsService ini sebagai gantinya: runasservice.com . Ini jauh, lebih mudah digunakan. Tidak ada konfigurasi XML omong kosong. Pada dasarnya ini hanya memberi Anda eksekusi RunAsService.exe, yang membungkus aplikasi konsol dengan argumen baris perintah sebagai layanan. Saya menggunakan ini untuk menjalankan skrip bash Cygwin sebagai layanan !!! Sayangnya, alat sederhana ini tampaknya merupakan sumber tertutup.
Kaz
8
mencalonkan untuk membuka kembali berdasarkan "alat perangkat lunak yang biasa digunakan oleh pemrogram". Yang pasti jawabannya adalah pertanyaan ini. Juga ingatlah ini adalah hasil Google pertama ketika mencari "windows mulai file batch sebagai layanan", jadi apakah itu dalam lingkup sempit bahwa beberapa hal moderator adalah 'pada topik' yang menurut dunia lain dianggapnya. Saya memilih pragmatisme daripada dogmatisme di sini.
Adam Cameron
Pertanyaan serupa dapat ditemukan di serverfault serverfault.com/questions/54676/...
Stephen Quan

Jawaban:

151

NSSM benar-benar gratis dan sangat mudah, menjalankan command prompt / terminal sebagai administrator:

nssm install "YourCoolServiceNameLabel"

maka dialog akan muncul sehingga Anda dapat memilih di mana file yang ingin Anda jalankan.

untuk menghapus

nssm remove "YourCoolServiceNameLabel"
Junior Mayhé
sumber
25
+1 Tidak pernah mendengar yang satu ini tetapi sangat bagus. NSSM memang tidak payah!
Byron Whitlock
1
Butuh waktu 2 menit untuk menginstal layanan
Ben Wilde
3
@ Junior M Terima kasih !! Kamu menyelamatkanku. Saya telah menghabiskan 4 jam untuk ini. Terima kasih!!
verystrongjoe
2
apakah Anda tahu jika ada cara untuk memberikan nssmsemua argumen yang diperlukan pada input untuk menghindari entri data popup - saya mencoba mengotomatiskan proses?
amfibi
1
NSSM terus terhapus di beberapa pelanggan kami oleh antivirus GDATA. Ya, saya tahu, masuk daftar putih ... tetapi pelanggan tidak melakukan apa yang baik untuk mereka. Itu kebenaran yang menyedihkan.
Dreamspace President
61

Mengapa tidak mengaturnya sebagai Tugas Terjadwal yang dijadwalkan untuk dijalankan saat start up?

Stephen Martin
sumber
1
Saya memiliki sejumlah file batch yang melakukan pencadangan melalui robocopy yang saya mulai melalui Tugas Terjadwal (buka Control Panel, Tugas Terjadwal) yang berjalan di server Win 2003. Berhasil ...
SAL
Lakukan saja ini dengan skrip yang kami gunakan untuk memantau layanan cadangan kami. Itu bekerja seperti pesona.
music2myear
1
ini adalah solusi imo terbaik. tidak diperlukan perangkat lunak pihak ketiga dan tidak ada antarmuka baris perintah. Ditambah Penjadwal Tugas menyediakan banyak opsi untuk pemicu, kondisi, dll.
dev
3
Berfungsi sekarang setelah saya mengetahuinya: Ketika tugas dijalankan saat startup (dengan "Jalankan apakah pengguna masuk atau tidak")% UserProfile% adalah C: \ Users \ Default \ Kapan saja akan menjadi yang diharapkan C: \ Users \ ExpectedUser \ Ini dapat membuat kegagalan misterius untuk beberapa file .bat yang tampaknya berfungsi dengan baik dalam tugas terjadwal lainnya.
user1754036
2
Tugas yang dijadwalkan sangat tidak dapat diandalkan - saya benar-benar menemukan pertanyaan ini karena semua masalah yang saya alami dengan tugas tidak diluncurkan tepat waktu tanpa alasan yang jelas.
22

Ada built-in windows cmd untuk melakukan ini: sc create . Tidak semewah nssm, tetapi Anda tidak perlu mengunduh perangkat lunak tambahan.

sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]

Catatan

  • mulai = permintaan berarti Anda harus memulai layanan sendiri
  • spasi diperlukan setelah =
  • Saya memang mengalami kesalahan pada mulai layanan bahwa layanan tidak merespons secara tepat waktu, tetapi jelas layanan telah menjalankan .bat berhasil. Belum menggali ini tetapi utas ini mengalami hal yang sama dan menyelesaikannya menggunakan nssm untuk menginstal layanan.
w00ngy
sumber
4
Windows tampaknya tidak menjalankan file .bat sebagai layanan.
Perkins
@ Perkins - Punyaku bekerja kemarin pada beberapa mesin. Apakah Anda mengalami sesuatu yang spesifik? Saya memang menemukan kesalahan bahwa layanan tidak merespons secara tepat waktu saat mulai, tetapi file .bat untuk startup server Kibana node.js dan itu berjalan dengan sukses bahkan dengan kesalahan. Orang-orang di utas ini tampaknya mengalami hal yang sama tetapi tidak dengan nssm. stackoverflow.com/a/40130630/885535
w00ngy
2
Dalam kasus saya file-file file batch yang seharusnya dibuat tidak dibuat dan program-program tidak berjalan, jadi saya harus menganggap itu tidak memulai. Saya berhasil mengatasinya dengan membuat layanan untuk menjalankan cmd.exe / C <batchfile> sebagai gantinya. Perhatikan bahwa saya menggunakan Windows 10, jadi ini mungkin beberapa hal "keamanan" baru.
Perkins
@Perkins Saya baru saja menjalankannya pada win10 1803 tidak masalah, memulai server node.js saya. Apakah file bat membuat file dan menjalankan layanan ketika dipanggil dari cmd atau PowerShell? Apakah Anda mendapatkan kotak pesan saat Anda memulai layanan? Apakah layanan Anda memiliki izin ke direktori tersebut? Anda dapat menambahkan beberapa kesalahan saat masuk ke dalam kelelawar dengan menulis ke file log lokal, lihat apakah itu berfungsi.
w00ngy
1
Dapatkan " Kesalahan 1053: Layanan tidak menanggapi permintaan awal atau kontrol secara tepat waktu. "
Alex Klaus
5

Tidak perlu perangkat lunak tambahan. Gunakan penjadwal tugas -> buat tugas -> disembunyikan. Kotak centang untuk disembunyikan ada di sudut kiri bawah. Tetapkan tugas untuk memicu saat masuk (atau kondisi apa pun yang Anda suka) dan pilih tugas di tab tindakan. Menjalankannya disembunyikan memastikan bahwa tugas berjalan diam-diam di latar belakang seperti layanan.

Perhatikan bahwa Anda juga harus mengatur program untuk menjalankan "apakah pengguna masuk atau tidak" atau program akan tetap berjalan di latar depan.

Zediiiii
sumber
3

Seperti yang dikatakan Doug Currie, gunakan RunAsService.

Dari pengalaman masa lalu saya, Anda harus ingat bahwa Layanan yang Anda hasilkan akan

  • memiliki satu set variabel lingkungan yang sama sekali berbeda
  • harus diperiksa dengan cermat untuk masalah hak / izin
  • dapat menyebabkan kekacauan jika membuka dialog yang meminta segala jenis input

tidak yakin apakah yang terakhir masih berlaku ... itu adalah malam besar kuda betina dalam proyek yang saya kerjakan beberapa waktu lalu.

lexu
sumber
3

Meskipun tidak gratis (tapi $ 39), FireDaemon telah bekerja dengan baik untuk saya, saya harus merekomendasikannya. Ini akan menjalankan file batch Anda tetapi memiliki banyak fungsi tambahan dan sangat berguna seperti penjadwalan, pemantauan layanan, GUI atau instalasi layanan berbasis XML, dependensi, variabel lingkungan dan manajemen log.

Saya mulai menggunakan FireDaemon untuk meluncurkan server aplikasi JBoss ( run.bat ) tetapi segera setelah menyadari bahwa kekayaan kemampuan konfigurasi FireDaemon memungkinkan saya untuk membuang file batch dan menciptakan kembali maksud dari perintah-perintahnya dalam definisi layanan FireDaemon.

Ada juga FireDaemon SUPER yang disebut Trinity yang mungkin ingin Anda lihat jika Anda memiliki sejumlah besar server Windows untuk mengelola layanan ini (atau secara teknis, layanan apa pun).

Nicholas
sumber
2

Pada Windows 2019 Server, Anda dapat menjalankan server java Minecraft dengan perintah berikut:

sc buat minecraft-server DisplayName = "minecraft-server" binpath = "cmd.exe /CC:\Users\Administrator\Desktop\rungui1151.lnk" type = own start = auto

File .lnk adalah cara pintas standar windows ke file batch.

--- .bat file dimulai ---

java -Xmx40960M -Xms40960M -d64 -jar minecraft_server.1.15.1.jar

--- .bat file berakhir ---

Semua ini karena:

layanan tidak tahu bagaimana memulainya dalam folder,

cmd.exe tidak tahu cara memulai di folder

Memulai layanan akan menghasilkan kesalahan "tepat waktu", tetapi file log mengungkapkan server sedang berjalan.

Jika Anda perlu mematikan server, masuklah ke task manager dan temukan server java di proses latar belakang dan akhiri, atau hentikan server dari dalam game menggunakan perintah / stop, atau untuk program / server lain, gunakan metode relevan dengan server.

Goofyseeker311
sumber
Ini tidak memberikan jawaban untuk pertanyaan itu. Setelah memiliki reputasi yang cukup, Anda dapat mengomentari setiap pos ; alih-alih, berikan jawaban yang tidak memerlukan klarifikasi dari penanya . - Dari Ulasan
Jeremy J Starcher
1
jika Anda membacanya dengan benar, Anda akan melihat itu berisi jawaban sempurna, relevan dengan contoh
Goofyseeker311
0

AlwaysUp akan dengan mudah menjalankan file batch Anda sebagai layanan. Ini mirip dengan FireDaemon (disebutkan di atas) dan tidak gratis, tetapi Anda mungkin menemukan fitur kaya yang ditetapkan sebagai aset di lingkungan profesional.

Semoga berhasil!

CoreTech
sumber