Esegui file batch come servizio di Windows


159

Per eseguire un'applicazione, è necessario dare il via a un file batch (che fa cose come avviare Jetty, visualizzare registri live, ecc.). L'applicazione funzionerà solo se questo file batch è in esecuzione. Sono quindi costretto ad avere questo file batch in esecuzione e non disconnettermi dal server Windows.

Questo file batch può essere eseguito come servizio? Sto sperimentando uno dei suggerimenti di una domanda simile .


27
La programmazione in batch è un argomento per Stack Exchange.
Harry Johnston,

12
Buona domanda. +1. I moderatori sono troppo arrabbiati ... Anche io ho un'altra buona risposta, ma la domanda è chiusa ((
gavenkoa

Uso invece RunAsService : runasservice.com . È molto, molto più semplice da usare. Nessuna assurdità di configurazione XML. Fondamentalmente questo ti dà solo l'eseguibile RunAsService.exe, che avvolge qualsiasi applicazione console con argomenti della riga di comando come servizio. Lo uso per eseguire script bash di Cygwin come servizi !!! Sfortunatamente, questo semplice strumento sembra essere a codice chiuso.
Kaz

8
nomina a riaprire sulla base di "strumenti software comunemente usati dai programmatori". Quale è sicuramente la risposta a questa domanda. Tenete anche presente che questo è il primo risultato di Google quando si cerca "Windows avvia il file batch come servizio", quindi se è nell'ambito ristretto che alcuni moderatori sono "in argomento", il resto del mondo pensa che lo sia. Qui voto per il pragmatismo sul dogmatismo.
Adam Cameron,

Una domanda simile può essere trovata su serverfault serverfault.com/questions/54676/…
Stephen Quan

Risposte:


151

NSSM è totalmente gratuito e iper-facile, con prompt dei comandi / terminale in esecuzione come amministratore:

nssm install "YourCoolServiceNameLabel"

quindi verrà visualizzata una finestra di dialogo in modo da poter scegliere dove si trova il file che si desidera eseguire.

disinstallare

nssm remove "YourCoolServiceNameLabel"

25
+1 Mai sentito parlare di questo ma è molto carino. NSSM non fa davvero schifo!
Byron Whitlock,

1
mi ci sono voluti 2 minuti per installare un servizio
Ben Wilde,

3
@Junior M Grazie !! Mi hai salvato. Ho trascorso 4 ore per questo. Grazie!!
verystrongjoe,

2
sai se c'è un modo per fornire nssmtutti gli argomenti necessari in input per evitare l'inserimento di dati popup - sto cercando di automatizzare il processo?
anfibio il

1
NSSM continua ad essere eliminato da alcuni dei nostri clienti dall'antivirus GDATA. Sì, lo so, whitelisting ... ma i clienti non fanno ciò che è buono per loro. Questa è la triste verità.
Presidente di Dreamspace,

61

Perché non configurarlo semplicemente come un'attività pianificata che è pianificata per essere eseguita all'avvio?


1
Ho un certo numero di file batch che eseguono backup tramite robocopy che avvio tramite le Attività pianificate (vai al Pannello di controllo, Attività pianificate) in esecuzione su un server Win 2003. Funziona a meraviglia ...
SAL

Ho appena fatto questo con uno script che abbiamo usato per monitorare il nostro servizio di backup. Esso funziona magicamente.
music2myear il

1
questa è la migliore soluzione imo. nessun software di terze parti richiesto e nessuna interfaccia della riga di comando. Inoltre, l'Utilità di pianificazione offre molte opzioni per trigger, condizioni, ecc.
dev

3
Funziona ora che ho capito questo: quando l'attività viene eseguita all'avvio (con "Esegui se l'utente ha effettuato l'accesso o meno")% UserProfile% è C: \ Users \ Default \ Ogni altra volta sarà il previsto C: \ Users \ ExpectedUser \ Questo può creare misteriosi errori per alcuni file .bat che sembrano funzionare bene in altre attività pianificate.
user1754036

2
Le attività pianificate sono notoriamente inaffidabili: in realtà mi sono imbattuto in questa domanda a causa di tutti i problemi che ho avuto con attività che non si avviavano in tempo senza una ragione apparente.

22

C'è un cmd di Windows incorporato per fare questo: sc create . Non è elegante come nssm, ma non è necessario scaricare un ulteriore software.

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

Nota

  • start = demand significa che devi avviare tu stesso il servizio
  • lo spazio bianco è richiesto dopo =
  • Ho riscontrato un errore all'avvio del servizio che il servizio non ha risposto in modo tempestivo, ma era chiaro che il servizio aveva eseguito correttamente il .bat. Non ho ancora scavato in questo, ma questo thread ha sperimentato la stessa cosa e lo ha risolto usando nssm per installare il servizio.

4
Windows sembra non eseguire i file .bat come servizi.
Perkins,

@Perkins - Il mio stava lavorando ieri su un paio di macchine. Stai vivendo qualcosa di specifico? Ho riscontrato un errore che il servizio non ha risposto tempestivamente all'avvio, ma il file .bat era all'avvio del server Kibana node.js e funzionava correttamente anche con l'errore. I ragazzi in questo thread sembravano sperimentare la stessa cosa, ma non con nssm. stackoverflow.com/a/40130630/885535
w00ngy

2
Nel mio caso i file che il file batch dovrebbe creare non vengono creati e i programmi non sono in esecuzione, quindi devo presumere che non lo stiano avviando. Sono riuscito a aggirare il problema creando invece il servizio per eseguire cmd.exe / C <batchfile>. Nota che sto usando Windows 10, quindi questa potrebbe essere una nuova cosa "di sicurezza".
Perkins,

@Perkins L'ho appena fatto funzionare su Win10 1803 nessun problema, avvia il mio server node.js. Il file bat crea i file ed esegue i servizi quando viene chiamato da cmd o powershell? Ricevi delle caselle msg quando vai per avviare il servizio? Il tuo servizio ha il permesso per quelle directory? È possibile aggiungere alcuni errori di registrazione nel blocco scrivendo in un file di registro locale, per vedere se funziona.
w00ngy,

1
Ottieni " Errore 1053: il servizio non ha risposto tempestivamente alla richiesta di avvio o controllo " .
Alex Klaus,

5

Non è necessario software aggiuntivo. Utilizzare l'utilità di pianificazione -> crea attività -> nascosto. La casella di controllo nascosta si trova nell'angolo in basso a sinistra. Imposta l'attività da attivare all'accesso (o qualunque condizione ti piaccia) e scegli l'attività nella scheda Azioni. L'esecuzione nascosta garantisce che l'attività venga eseguita in silenzio in background come un servizio.

Nota che devi anche impostare il programma per l'esecuzione "indipendentemente dal fatto che l'utente abbia effettuato l'accesso o meno" o il programma verrà comunque eseguito in primo piano.


3

Come dice Doug Currie, usa RunAsService.

Dalla mia esperienza passata devi ricordare che il Servizio che genererai lo farà

  • hanno un set completamente diverso di variabili d'ambiente
  • devono essere attentamente controllati per problemi relativi a diritti / autorizzazioni
  • potrebbe causare danni se apre finestre di dialogo che richiedono qualsiasi tipo di input

non sono sicuro che l'ultimo valga ancora ... è stata una grande cavalla da notte in un progetto a cui ho lavorato qualche tempo fa.


3

Sebbene non sia gratuito (ma $ 39), FireDaemon ha funzionato così bene per me che devo raccomandarlo. Eseguirà il tuo file batch ma ha un sacco di funzionalità aggiuntive e molto utili come la pianificazione, il monitoraggio dei servizi, l'installazione di servizi o dipendenze basata su GUI o XML, le dipendenze, le variabili ambientali e la gestione dei log.

Ho iniziato a utilizzare FireDaemon per avviare i server delle applicazioni JBoss ( run.bat ) ma poco dopo ho capito che la ricchezza delle capacità di configurazione di FireDaemon mi ha permesso di abbandonare il file batch e ricreare l'intento dei suoi comandi nella definizione del servizio FireDaemon.

C'è anche un SUPER FireDaemon chiamato Trinity che potresti voler guardare se hai un gran numero di server Windows su cui gestire questo servizio (o tecnicamente, qualsiasi servizio).


2

Su Windows 2019 Server, puoi eseguire un server java Minecraft con questi comandi:

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

Il file .lnk è un collegamento di Windows standard a un file batch.

--- Il file .bat inizia ---

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

--- Il file .bat termina ---

Tutto questo perché:

il servizio non sa come iniziare in una cartella,

cmd.exe non sa come iniziare in una cartella

L'avvio del servizio produrrà un errore "tempestivo", ma il file di registro rivela che il server è in esecuzione.

Se è necessario arrestare il server, è sufficiente accedere al task manager e trovare il server java nei processi in background e terminarlo, oppure terminare il server dal gioco utilizzando il comando / stop o per altri programmi / server, utilizzare i metodi rilevante per il server.


Questo non fornisce una risposta alla domanda. Una volta che hai una reputazione sufficiente , sarai in grado di commentare qualsiasi post ; fornire invece risposte che non richiedono chiarimenti da parte del richiedente . - Dalla recensione
Jeremy J Starcher,

1
se lo leggi correttamente, noterai che contiene la risposta perfetta, pertinente ad un esempio
Goofyseeker311

0

AlwaysUp eseguirà facilmente il file batch come servizio. È simile a FireDaemon (menzionato sopra) e non è gratuito, ma è possibile che il ricco set di funzionalità sia una risorsa in un ambiente professionale.

In bocca al lupo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.