Toplu iş dosyasını Windows hizmeti olarak çalıştırma


159

Bir uygulamayı çalıştırmak için, bir toplu iş dosyası başlatılmalıdır (bu, Jetty'i başlat, canlı günlükleri göster, vb. Gibi şeyler yapar). Uygulama yalnızca bu toplu iş dosyası çalışıyorsa çalışır. Bu nedenle, bu toplu iş dosyasını çalıştıracak ve Windows sunucusundan çıkmaya zorlanıyorum.

Bu toplu iş dosyası bir hizmet olarak çalıştırılabilir mi? Benzer bir sorunun önerilerinden birini deniyorum .


27
Yığın programlama, Stack Exchange için konuyla ilgilidir.
Harry Johnston

12
İyi soru. +1. Moderatörler çok öfkeli ... Ayrıca başka bir iyi cevabım var, ama soru kapandı ((
gavenkoa

Bunun yerine bu RunAsService kullanın: runasservice.com . Kullanımı çok, çok daha basit. XML yapılandırma saçmalık yok. Temelde bu sadece herhangi bir konsol uygulamasını bir hizmet olarak komut satırı bağımsız değişkenleriyle saran RunAsService.exe yürütülebilir dosyasını verir. Bu hizmet olarak Cygwin bash komut dosyalarını çalıştırmak için kullanın !!! Ne yazık ki, bu basit araç kapalı kaynak gibi görünüyor.
Kaz

8
"programcılar tarafından yaygın olarak kullanılan yazılım araçları" temelinde yeniden açılmaya aday gösterildi. Bu sorunun cevabı kesinlikle. Ayrıca, "windows toplu iş dosyasını bir hizmet olarak başlat" araması yaparken ilk Google sonucunun bu olduğunu unutmayın; bu nedenle, bazı moderatörlerin 'konu' olduğu düşünülürse dünyanın geri kalanı olduğunu düşünüyor. Burada dogmatizm için pragmatizme oy veriyorum.
Adam Cameron

Benzer bir soru serverfault serverfault.com/questions/54676/…
Stephen Quan

Yanıtlar:


151

NSSM tamamen ücretsiz ve hiper-kolay, yönetici olarak komut istemi / terminal çalışıyor:

nssm install "YourCoolServiceNameLabel"

çalıştırılmasını istediğiniz dosyanın nerede olduğunu seçebilmeniz için bir iletişim kutusu görüntülenir.

kaldırmak için

nssm remove "YourCoolServiceNameLabel"

25
+1 Bunu hiç duymadım ama çok güzel. NSSM gerçekten emmez!
Byron Whitlock

1
bir servis yüklemem 2 dakikamı aldı
Ben Wilde

3
@Junior M Teşekkürler !! Beni kurtardın. Bunun için 4 saat geçirdim. Teşekkürler!!
verystrongjoe

2
nssmpop-up veri girişini önlemek için girişte gerekli tüm argümanlar vermek için bir yol olup olmadığını biliyor musunuz - süreci otomatikleştirmek çalışıyorum?
Aralık'ta amp

1
NSSM, bazı müşterilerimizde GDATA antivirüs ile silinmeye devam ediyor. Evet, biliyorum, beyaz liste ... ama müşteriler onlar için iyi olanı yapmıyorlar. Bu üzücü gerçek.
Dreamspace Başkanı

61

Neden başlangıçta çalışması planlanan Zamanlanmış Görev olarak ayarlanmıyor?


1
Win 2003 sunucusunda çalışan Zamanlanmış Görevler (Denetim Masası, Zamanlanmış Görevler) gidin robocopy üzerinden yedekleme yapan bir dizi toplu iş dosyaları var. Bir tedavi çalışır ...
SAL

Bunu yedekleme servisimizi izlemek için kullandığımız bir senaryo ile yaptık. Mucizevi şekilde çalışır.
music2mymar

1
bu en iyi çözüm imo. üçüncü taraf yazılım gerektirmez ve komut satırı arabirimi gerekmez. Ayrıca Görev Zamanlayıcı, tetikleyiciler, koşullar vb. İçin birçok seçenek sunar
dev

3
Şimdi bunu anladım çalışır: Görev başlangıçta çalıştığında ("Kullanıcı oturum açmış olup olmadığını çalıştır" ile)% UserProfile% C: \ Users \ Default \ Başka herhangi bir zamanda beklenen C: \ Users \ ExpectedUser \ Bu, diğer zamanlanmış görevlerde iyi çalışıyor gibi görünen bazı .bat dosyaları için gizemli hatalar oluşturabilir.
user1754036

2
Zamanlanmış görevler kötü bir şekilde güvenilmez - Görünen bir sebep olmadan zamanında başlatılmayan görevlerle ilgili yaşadığım tüm sorunlar nedeniyle aslında bu soruya rastladım.

22

Bunu yapmak için yerleşik bir windows cmd var: sc create . Nssm kadar süslü değil, ancak ek bir yazılım indirmek zorunda değilsiniz.

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

Not

  • start = talep, hizmeti kendiniz başlatmanız gerektiği anlamına gelir
  • sonra boşluk gerekli =
  • Hizmetin zamanında yanıt vermediği hizmet başlangıcında bir hatayla karşılaştım, ancak hizmetin .bat'ı başarıyla çalıştırdığı açıktı. Buna henüz girmedim, ancak bu iş parçacığı aynı şeyi deneyimledi ve nssm'yi kullanarak hizmeti yüklemek için çözdü.

4
Windows, .bat dosyalarını hizmet olarak çalıştırmıyor gibi görünüyor.
Perkins

@Perkins - Mine dün birkaç makinede çalışıyordu. Belirli bir şey mi yaşıyorsunuz? Hizmetin başlangıçta zamanında yanıt vermediği bir hatayla karşılaştım, ancak .bat dosyası Kibana node.js sunucusunu başlatmaktı ve hatayla bile başarılı bir şekilde çalışıyordu. Bu konudaki çocuklar aynı şeyi deneyimliyor gibiydi ama nssm ile yoktu. stackoverflow.com/a/40130630/885535
w00ngy

2
Benim durumumda, toplu iş dosyasının oluşturması gereken dosyalar oluşturulmuyor ve programlar çalışmıyor, bu yüzden başlatmadığını varsaymak zorundayım. Bunun yerine cmd.exe / C <batchfile> çalıştırmak için hizmet oluşturarak etrafında çalışmayı başardı. Windows 10 kullanıyorum, bu yüzden bu yeni bir "güvenlik" şey olabilir.
Perkins

@Perkins Sadece win10 1803 üzerinde sorun var, node.js sunucumu başlatır. Yarasa dosyası cmd veya powershell'den çağrıldığında dosyaları oluşturur ve hizmetleri çalıştırır mı? Hizmeti başlattığınızda herhangi bir mesaj kutusu alıyor musunuz? Hizmetinizin bu dizinlere izni var mı? Yerel bir günlük dosyasına yazarak yarasa günlüğe kaydetme sırasında bazı hata günlüğü ekleyebilirsiniz, bunun işe yarayıp yaramadığına bakın.
w00ngy

1
" Hata 1053: Hizmet, başlatma veya denetim isteğine zamanında yanıt vermedi. "
Alex Klaus

5

Ek yazılıma gerek yok. Görev zamanlayıcıyı kullanın -> görev oluştur -> gizli. Gizli için onay kutusu sol alt köşede bulunur. Oturum açmada (veya istediğiniz herhangi bir koşulda) tetiklenecek görevi ayarlayın ve işlemler sekmesinden görevi seçin. Gizli olarak çalıştırılması, görevin arka planda bir hizmet gibi sessizce çalışmasını sağlar.

Ayrıca programı "kullanıcı oturum açmış olsun veya olmasın" çalışacak şekilde ayarlamanız gerektiğini unutmayın; aksi halde program yine de ön planda çalışır.


3

Doug Currie'nin dediği gibi RunAsService kullanın.

Geçmiş deneyimlerimden, oluşturduğunuz Hizmetin

  • tamamen farklı ortam değişkenleri kümesine sahip olmak
  • haklar / izinler açısından dikkatle incelenmelidir
  • herhangi bir girdi isteyen diyaloglar açılırsa tahribat yaratabilir

Sonuncunun hala geçerli olup olmadığından emin değilim ... bir süre önce çalıştığım bir projede büyük bir gece kısrakıydı.


3

Ücretsiz olmasa da (39 $), FireDaemon benim için çok iyi çalıştı bunu tavsiye etmek zorunda. Toplu iş dosyanızı çalıştıracak, ancak zamanlama, hizmet izleme, GUI veya XML tabanlı hizmet yükleme, bağımlılıklar, çevresel değişkenler ve günlük yönetimi gibi ek ve çok kullanışlı işlevlere sahiptir.

JBoss uygulama sunucularını ( run.bat ) başlatmak için FireDaemon kullanmaya başladım, ancak kısa bir süre sonra FireDaemon yapılandırma yeteneklerinin zenginliğinin toplu iş dosyasını atmamı ve komutlarının niyetini FireDaemon hizmet tanımında yeniden oluşturmamı sağladığını fark ettim.

Bu hizmeti (veya teknik olarak herhangi bir hizmeti) yönetmek için çok sayıda Windows sunucunuz varsa bakmak isteyebileceğiniz Trinity adında bir SUPER FireDaemon da vardır.


2

Windows 2019 Server'da, aşağıdaki komutlarla bir Minecraft java sunucusu çalıştırabilirsiniz:

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

.Lnk dosyası, bir toplu iş dosyasına ilişkin standart bir windows kısayoludur.

--- .bat dosyası başlıyor ---

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

--- .bat dosyası biter ---

Bütün bunlar çünkü:

hizmet bir klasörde nasıl başlatılacağını bilmiyor,

cmd.exe bir klasörde nasıl başlatılacağını bilmiyor

Hizmetin başlatılması "zamanında" hatası verir, ancak günlük dosyası sunucunun çalıştığını gösterir.

Sunucuyu kapatmanız gerekiyorsa, görev yöneticisine gidin ve sunucu java'yı arka plan işlemlerinde bulun ve sonlandırın veya / stop komutunu kullanarak veya oyundan diğer programlar / sunucular için sunucuyu oyundan sonlandırın. sunucuyla alakalı.


Bu soruya bir cevap vermez. Yeterli bir üne sahip olduğunuzda , herhangi bir yazı hakkında yorum yapabilirsiniz ; bunun yerine askerden açıklama gerektirmeyen cevaplar verin . - Şu kaynaktan
Jeremy J Starcher

1
Düzgün okuduysanız, bunun bir örnekle ilgili mükemmel cevabı içerdiğini göreceksiniz
Goofyseeker311

0

AlwaysUp , toplu iş dosyanızı bir hizmet olarak kolayca çalıştıracaktır. FireDaemon'a (yukarıda bahsedilen) benzer ve ücretsiz değildir, ancak zengin özelliğin profesyonel bir ortamda bir varlık olarak ayarlandığını görebilirsiniz.

İyi şanslar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.