Exécuter le fichier de commandes en tant que service Windows

159

Afin d'exécuter une application, un fichier de commandes doit être lancé (ce qui fait des choses comme démarrer Jetty, afficher les journaux en direct, etc.). L'application ne fonctionnera que si ce fichier de commandes est en cours d'exécution. Je suis donc obligé de faire fonctionner ce fichier batch et de ne pas me déconnecter du serveur Windows.

Ce fichier de commandes peut-il être exécuté en tant que service? J'expérimente l'une des suggestions d'une question similaire .

publicRavi
la source
27
La programmation par lots est sur le sujet pour Stack Exchange.
Harry Johnston
12
Bonne question. +1. Les modérateurs sont trop en colère ... J'ai également une autre bonne réponse, mais la question est close ((
gavenkoa
J'utilise plutôt ce RunAsService: runasservice.com . C'est beaucoup, beaucoup plus simple à utiliser. Pas de non-sens de configuration XML. Fondamentalement, cela vous donne simplement l'exécutable RunAsService.exe, qui encapsule toute application console avec des arguments de ligne de commande en tant que service. J'utilise ceci pour exécuter des scripts Cygwin bash en tant que services !!! Malheureusement, cet outil simple semble être une source fermée.
Kaz
8
nomination pour la réouverture sur la base des "outils logiciels couramment utilisés par les programmeurs". Quelle est la réponse à cette question. Gardez également à l'esprit que c'est le premier résultat de Google lors de la recherche de "windows start batch file as a service", donc que ce soit dans le cadre restreint que certains modérateurs sont "sur le sujet", le reste du monde le pense. Je vote ici pour le pragmatisme plutôt que pour le dogmatisme.
Adam Cameron
Une question similaire peut être trouvée sur serverfault serverfault.com/questions/54676/…
Stephen Quan

Réponses:

151

NSSM est totalement gratuit et hyper-facile, exécutant l'invite de commande / terminal en tant qu'administrateur:

nssm install "YourCoolServiceNameLabel"

puis une boîte de dialogue apparaîtra pour que vous puissiez choisir où se trouve le fichier que vous souhaitez exécuter.

désinstaller

nssm remove "YourCoolServiceNameLabel"
Junior Mayhé
la source
25
+1 Jamais entendu parler de celui-ci mais c'est très agréable. NSSM ne craint vraiment pas!
Byron Whitlock
1
m'a pris 2 minutes pour installer un service
Ben Wilde
3
@Junior M Merci !! Tu m'as sauvé. J'ai passé 4 heures pour cela. Merci!!
verystrongjoe
2
savez-vous s'il existe un moyen de donner nssmtous les arguments nécessaires en entrée pour éviter la saisie de données contextuelles - j'essaie d'automatiser le processus?
amphibient
1
NSSM continue d'être supprimé chez certains de nos clients par l'antivirus GDATA. Oui, je sais, la liste blanche ... mais les clients ne font pas ce qui est bon pour eux. C'est la triste vérité.
Dreamspace President
61

Pourquoi ne pas simplement le configurer en tant que tâche planifiée dont l'exécution est planifiée au démarrage?

Stephen Martin
la source
1
J'ai un certain nombre de fichiers batch faisant des sauvegardes via robocopy que je démarre via les tâches planifiées (allez au Panneau de configuration, Tâches planifiées) fonctionnant sur un serveur Win 2003. Ça marche un régal ...
SAL
Je viens de faire cela avec un script que nous avons utilisé pour surveiller notre service de sauvegarde. Il fonctionne comme un charme.
music2myear
1
c'est la meilleure solution imo. aucun logiciel tiers requis et aucune interface de ligne de commande. De plus, le planificateur de tâches fournit de nombreuses options pour les déclencheurs, les conditions, etc.
dev
3
Fonctionne maintenant que j'ai compris ceci: Lorsque la tâche s'exécute au démarrage (avec "Exécuter si l'utilisateur est connecté ou non")% UserProfile% est C: \ Users \ Default \ À tout autre moment, ce sera le C: \ Users \ attendu ExpectedUser \ Cela peut créer des échecs mystérieux pour certains fichiers .bat qui semblent fonctionner correctement dans d'autres tâches planifiées.
user1754036
2
Les tâches planifiées ne sont notoirement pas fiables - je suis en fait tombé sur cette question à cause de tous les problèmes que j'ai rencontrés avec des tâches qui ne se lancent pas à temps sans raison apparente.
22

Il existe une commande Windows intégrée pour ce faire: sc create . Pas aussi sophistiqué que nssm, mais vous n'avez pas besoin de télécharger un logiciel supplémentaire.

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

Remarque

  • start = demand signifie que vous devez démarrer le service vous-même
  • un espace est requis après =
  • J'ai rencontré une erreur au démarrage du service selon laquelle le service n'a pas répondu en temps opportun, mais il était clair que le service avait exécuté le .bat avec succès. Je n'ai pas encore creusé cela, mais ce thread a vécu la même chose et l'a résolu en utilisant nssm pour installer le service.
w00ngy
la source
4
Windows semble ne pas exécuter les fichiers .bat en tant que services.
Perkins
@Perkins - Le mien travaillait hier sur quelques machines. Vivez-vous quelque chose de spécifique? J'ai rencontré une erreur selon laquelle le service n'a pas répondu en temps opportun au démarrage, mais le fichier .bat devait démarrer le serveur Kibana node.js et il fonctionnait avec succès même avec l'erreur. Les gars de ce fil semblaient vivre la même chose, mais pas avec nssm. stackoverflow.com/a/40130630/885535
w00ngy
2
Dans mon cas, les fichiers que le fichier de commandes est censé créer ne sont pas créés et les programmes ne sont pas en cours d'exécution, je dois donc supposer qu'il ne le démarre pas. J'ai réussi à contourner ce problème en créant le service pour exécuter cmd.exe / C <batchfile> à la place. Notez que j'utilise Windows 10, donc cela peut être une nouvelle chose de «sécurité».
Perkins
@Perkins Je viens de le faire fonctionner sur win10 1803 sans problème, démarre mon serveur node.js. Le fichier bat crée-t-il les fichiers et exécute-t-il les services lorsqu'il est appelé depuis cmd ou powershell? Recevez-vous des boîtes de message lorsque vous démarrez le service? Votre service a-t-il l'autorisation d'accéder à ces répertoires? Vous pouvez ajouter une journalisation des erreurs dans la chauve-souris en écrivant dans un fichier journal local, voir si cela fonctionne.
w00ngy
1
Obtenez " Erreur 1053: le service n'a pas répondu à la demande de démarrage ou de contrôle en temps opportun. "
Alex Klaus
5

Pas besoin de logiciel supplémentaire. Utilisez le planificateur de tâches -> créer une tâche -> masqué. La case à cocher pour masqué se trouve dans le coin inférieur gauche. Définissez la tâche à déclencher lors de la connexion (ou selon la condition que vous souhaitez) et choisissez la tâche dans l'onglet Actions. L'exécuter masqué garantit que la tâche s'exécute silencieusement en arrière-plan comme un service.

Notez que vous devez également configurer le programme pour qu'il s'exécute «que l'utilisateur soit connecté ou non», sinon le programme fonctionnera toujours au premier plan.

Zediiiii
la source
3

Comme le dit Doug Currie, utilisez RunAsService.

D'après mon expérience passée, vous devez vous rappeler que le service que vous générez sera

  • avoir un ensemble complètement différent de variables d'environnement
  • doivent être soigneusement inspectés pour les problèmes de droits / autorisations
  • peut causer des ravages s'il ouvre des boîtes de dialogue demandant tout type d'entrée

Je ne sais pas si le dernier s'applique toujours ... c'était une grosse jument de nuit dans un projet sur lequel j'ai travaillé il y a quelque temps.

lexu
la source
3

Bien que ce ne soit pas gratuit (mais 39 $), FireDaemon a si bien fonctionné pour moi que je dois le recommander. Il exécutera votre fichier de commandes, mais dispose de nombreuses fonctionnalités supplémentaires et très utiles telles que la planification, la surveillance de la maintenance, l'installation de services par GUI ou XML, les dépendances, les variables environnementales et la gestion des journaux.

J'ai commencé à utiliser FireDaemon pour lancer les serveurs d'applications JBoss ( run.bat ) mais j'ai réalisé peu de temps après que la richesse des capacités de configuration de FireDaemon me permettait d'abandonner le fichier batch et de recréer l'intention de ses commandes dans la définition du service FireDaemon.

Il existe également un SUPER FireDaemon appelé Trinity que vous voudrez peut-être examiner si vous avez un grand nombre de serveurs Windows sur lesquels gérer ce service (ou techniquement, n'importe quel service).

Nicolas
la source
2

Sur Windows 2019 Server, vous pouvez exécuter un serveur java Minecraft avec ces commandes:

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

Le fichier .lnk est un raccourci Windows standard vers un fichier de commandes.

--- Le fichier .bat commence ---

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

--- Le fichier .bat se termine ---

Tout cela parce que:

le service ne sait pas comment démarrer dans un dossier,

cmd.exe ne sait pas comment démarrer dans un dossier

Le démarrage du service produira une erreur "en temps opportun", mais le fichier journal révèle que le serveur est en cours d'exécution.

Si vous avez besoin d'arrêter le serveur, allez simplement dans le gestionnaire de tâches et trouvez le serveur java dans les processus d'arrière-plan et terminez-le, ou arrêtez le serveur du jeu à l'aide de la commande / stop, ou pour d'autres programmes / serveurs, utilisez les méthodes pertinent pour le serveur.

Goofyseeker311
la source
Cela ne répond pas à la question. Une fois que vous aurez une réputation suffisante, vous pourrez commenter n'importe quel message ; à la place, fournissez des réponses qui ne nécessitent pas de clarification de la part du demandeur . - De l'avis
Jeremy J Starcher
1
si vous le lisez correctement, vous remarquerez qu'il contient la réponse parfaite, pertinente pour un exemple
Goofyseeker311
0

AlwaysUp exécutera facilement votre fichier de commandes en tant que service. Il est similaire à FireDaemon (mentionné ci-dessus) et n'est pas gratuit, mais vous pouvez trouver que le riche ensemble de fonctionnalités est un atout dans un environnement professionnel.

Bonne chance!

CoreTech
la source