what sintaxis off means lenguaje comandos batch bat avanzados windows command-line batch-file cmd

windows - sintaxis - ¿Detener e iniciar un servicio a través de un archivo por lotes o cmd?



sintaxis echo cmd (14)

A veces se puede encontrar que la parada no funciona ..

Mi SQlServer a veces hace esto. Usando la siguiente línea de comandos lo mata. Si realmente necesitas tu script para matar cosas que no se detienen. Me gustaría hacer esto como último recurso.

taskkill /pid [pid number] /f

¿Cómo puedo programar un bat o cmd para detener e iniciar un servicio de manera confiable con la comprobación de errores (o avisarme que no fue exitoso por cualquier razón)?


Acabo de usar el ejemplo de Jonas anterior y creé la lista completa de 0 a 24 niveles de error. La otra publicación es correcta: net start y net stop solo usan errorlevel 0 para el éxito y 2 para el fracaso.

Pero esto es lo que funcionó para mí:

net stop postgresql-9.1 if %errorlevel% == 2 echo Access Denied - Could not stop service if %errorlevel% == 0 echo Service stopped successfully echo Errorlevel: %errorlevel%

Cambia de stop a start y funciona a la inversa.


El reinicio manual del servicio es correcto: services.msc tiene el botón "Reiniciar", pero en la línea de comandos los comandos sc y net carecen de un interruptor de "reinicio" y si el reinicio está programado en el archivo cmd / bat, el servicio se detiene y se inicia de inmediato, a veces recibe un error porque el servicio aún no se ha detenido, necesita algo de tiempo para apagar las cosas.

Esto puede generar un error: sc stop sc start

Es una buena idea insertar el tiempo de espera, uso ping (hace ping cada 1 segundo): sc stop ping localhost -n 60 sc start


En lugar de revisar los códigos, esto también funciona.

net start "Apache tomcat" || goto ExitError :End exit 0 :ExitError echo An error has occurred while starting the tomcat services exit 1


Estoy escribiendo un servicio de Windows en C #, el ciclo de detención / desinstalación / creación / instalación / inicio se volvió demasiado agotador. Escribí un mini script, lo llamé reploy.bat y lo reploy.bat en mi directorio de salida de Visual Studio (uno que tiene el servicio ejecutable construido) para automatizar el ciclo.

Solo configura estos 3 vars

servicename : esto se muestra en el panel de control del Servicio de Windows (services.msc)

slndir : carpeta (no la ruta completa) que contiene su archivo de solución (.sln)

binpath : ruta completa (no la ruta de la carpeta) al ejecutable del servicio desde la compilación

NOTA: Esto debe ejecutarse desde la línea de comandos de Visual Studio Developer para que el comando msbuild funcione.

SET servicename="My Amazing Service" SET slndir="C:dir/that/contains/sln/file" SET binpath="C:path/to/service.exe" SET currdir=%cd% call net stop %servicename% call sc delete %servicename% cd %slndir% call msbuild cd %bindir% call sc create %servicename% binpath=%binpath% call net start %servicename% cd %currdir%

Tal vez esto ayude a alguien :)


He creado mi archivo por lotes personal para esto, el mío es un poco diferente, pero puede modificarlo como mejor le parezca. Creé esto hace poco porque estaba aburrido y quería hacer una forma sencilla para que las personas puedan ingresar el final, el inicio, la detención o la configuración en automático. Este archivo BAT simplemente solicita que ingrese el nombre del servicio y hará el resto por usted. No me di cuenta de que estaba buscando algo que indicara algún error, debo haber leído mal esa parte. Aunque normalmente esto se puede hacer ingresando >> output.txt al final de la línea.

El% var% es solo una manera para que el usuario pueda ingresar su propio servicio en este, en lugar de tener que modificar el archivo bat cada vez que desee iniciar / detener un servicio diferente.

Si me equivoco, cualquiera puede sentirse libre de corregirme al respecto.

@echo off set /p c= Would you like to start a service [Y/N]? if /I "%c%" EQU "Y" goto :1 if /I "%c%" EQU "N" goto :2 :1 set /p var= Service name: :2 set /p c= Would you like to stop a service [Y/N]? if /I "%c%" EQU "Y" goto :3 if /I "%c%" EQU "N" goto :4 :3 set /p var1= Service name: :4 set /p c= Would you like to disable a service [Y/N]? if /I "%c%" EQU "Y" goto :5 if /I "%c%" EQU "N" goto :6 :5 set /p var2= Service name: :6 set /p c= Would you like to set a service to auto [Y/N]? if /I "%c%" EQU "Y" goto :7 if /I "%c%" EQU "N" goto :10 :7 set /p var3= Service name: :10 sc start %var% sc stop %var1% sc config %var2% start=disabled sc config %var3% start=auto


La sintaxis siempre me atrapa ... así que ...

Aquí se explica explícitamente cómo agregar una línea a un archivo por lotes que eliminará un servicio remoto (en otra máquina) si usted es un administrador en ambas máquinas, ejecute el .bat como administrador y las máquinas están en el mismo dominio. El nombre de la máquina sigue el formato UNC / myserver

sc //ip.ip.ip.ip stop p4_1

En este caso ... p4_1 era tanto el Nombre del servicio como el Nombre para mostrar, cuando ve las Propiedades del servicio en Service Manager. Debe utilizar el nombre del servicio.

Para sus adictos a las operaciones de servicio ... ¡asegúrese de añadir su código de razón y sus comentarios! es decir, ''4'' que es igual a ''Planificado'' y comenta ''Detener servidor para mantenimiento''

sc //ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance


Nos gustaría pensar que "net stop" detendrá el servicio. Lamentablemente, la realidad no es tan blanco y negro. Si el servicio tarda mucho tiempo en detenerse, el comando volverá antes de que el servicio se haya detenido. Sin embargo, no lo sabrás, a menos que verifiques el nivel de error.

La solución parece ser hacer un ciclo en busca del estado del servicio hasta que se detenga, con una pausa cada vez que se realiza el ciclo.

Pero entonces de nuevo...

Estoy viendo que el primer servicio tarda mucho tiempo en detenerse, luego la "parada neta" de un servicio posterior parece no hacer nada. Mire el servicio en el administrador de servicios, y su estado sigue siendo "Iniciado", sin cambios en "Detener". Sin embargo, puedo detener este segundo servicio manualmente utilizando el SCM, y se detiene en 3 o 4 segundos.


Puede usar el comando NET START y luego verificar la variable de entorno ERRORLEVEL, por ejemplo

net start [your service] if %errorlevel% == 2 echo Could not start service. if %errorlevel% == 0 echo Service started successfully. echo Errorlevel: %errorlevel%

Descargo de responsabilidad: He escrito esto desde lo más alto de mi cabeza, pero creo que funcionará.



o puede iniciar el servicio remoto con este cmd: sc //<computer> start <service>


SC puede hacer todo con servicios ... iniciar, detener, verificar, configurar y más ...


Use el comando SC (control de servicio), le brinda muchas más opciones que solo start y stop .

DESCRIPTION: SC is a command line program used for communicating with the NT Service Controller and services. USAGE: sc <server> [command] [service name] ... The option <server> has the form "//ServerName" Further help on commands can be obtained by typing: "sc [command]" Commands: query-----------Queries the status for a service, or enumerates the status for types of services. queryex---------Queries the extended status for a service, or enumerates the status for types of services. start-----------Starts a service. pause-----------Sends a PAUSE control request to a service. interrogate-----Sends an INTERROGATE control request to a service. continue--------Sends a CONTINUE control request to a service. stop------------Sends a STOP request to a service. config----------Changes the configuration of a service (persistant). description-----Changes the description of a service. failure---------Changes the actions taken by a service upon failure. qc--------------Queries the configuration information for a service. qdescription----Queries the description for a service. qfailure--------Queries the actions taken by a service upon failure. delete----------Deletes a service (from the registry). create----------Creates a service. (adds it to the registry). control---------Sends a control to a service. sdshow----------Displays a service''s security descriptor. sdset-----------Sets a service''s security descriptor. GetDisplayName--Gets the DisplayName for a service. GetKeyName------Gets the ServiceKeyName for a service. EnumDepend------Enumerates Service Dependencies. The following commands don''t require a service name: sc <server> <command> <option> boot------------(ok | bad) Indicates whether the last boot should be saved as the last-known-good boot configuration Lock------------Locks the Service Database QueryLock-------Queries the LockStatus for the SCManager Database EXAMPLE: sc start MyService


net start [serviceName]

y

net stop [serviceName]

le dirá si han tenido éxito o han fallado bastante claramente. Por ejemplo

U:/>net stop alerter The Alerter service is not started. More help is available by typing NET HELPMSG 3521.

Si se ejecuta desde un archivo por lotes, tiene acceso al ERRORLEVEL del código de retorno. 0 indica éxito Cualquier cosa más alta indica un fracaso.

Como archivo bat, error.bat :

@echo off net stop alerter if ERRORLEVEL 1 goto error exit :error echo There was a problem pause

La salida se ve así:

U:/>error.bat The Alerter service is not started. More help is available by typing NET HELPMSG 3521. There was a problem Press any key to continue . . .

Códigos de retorno

- 0 = Success - 1 = Not Supported - 2 = Access Denied - 3 = Dependent Services Running - 4 = Invalid Service Control - 5 = Service Cannot Accept Control - 6 = Service Not Active - 7 = Service Request Timeout - 8 = Unknown Failure - 9 = Path Not Found - 10 = Service Already Running - 11 = Service Database Locked - 12 = Service Dependency Deleted - 13 = Service Dependency Failure - 14 = Service Disabled - 15 = Service Logon Failure - 16 = Service Marked For Deletion - 17 = Service No Thread - 18 = Status Circular Dependency - 19 = Status Duplicate Name - 20 = Status Invalid Name - 21 = Status Invalid Parameter - 22 = Status Invalid Service Account - 23 = Status Service Exists - 24 = Service Already Paused

Editar 20.04.2015

Códigos de retorno:

El comando NET no devuelve los códigos de retorno de la clase Win32_Service documentados (Servicio no activo, Tiempo de espera de solicitud de servicio, etc.) y para muchos errores simplemente devolverá Errorlevel 2.

Mire aquí: http://ss64.com/nt/net_service.html