Windows Server

Ejecutar un programa como servicio en Windows Server: inicio automático 24/7 con NSSM

5 pasos 15 min de lectura 15 vistas 0
Contenido

Los programas iniciados desde una sesión de Escritorio remoto se detienen cuando se cierra esa sesión y no vuelven a arrancar después de un reinicio. Los bots, los servidores de juegos, las aplicaciones de Node.js o Python, los recolectores de datos y las herramientas de trading deberían, en cambio, iniciarse automáticamente con Windows y reiniciarse solos si fallan. Esta guía muestra tres formas confiables de conseguirlo en Windows Server: el Programador de tareas, la herramienta gratuita NSSM, que convierte programas en servicios, y la configuración de recuperación de servicios del propio Windows.

Cerrar la ventana de Escritorio remoto (desconectarse) deja sus programas en ejecución, pero elegir Cerrar sesión (Sign out), un límite de tiempo de sesión automático o un reinicio los cierra. No dependa de una sesión abierta para nada que deba funcionar 24/7.

¿Qué método debo usar?

MétodoIdeal paraSe reinicia si fallaRequiere un escritorio con sesión iniciada
Programador de tareas "Al iniciar el sistema"Scripts y programas de consolaSí (opciones de reintento)No
Servicio con NSSMAplicaciones de consola que se ejecutan de forma continua (Node.js, Python, Java, servidores de juegos)Sí, de inmediatoNo
Inicio de sesión automático + carpeta InicioProgramas que necesitan una ventana visible o interfaz gráficaNoSí

Método 1: Programador de tareas al iniciar el sistema

Abra taskschd.msc y elija Crear tarea (Create Task), no "Crear tarea básica":

  1. General: seleccione Ejecutar tanto si el usuario inició sesión como si no (Run whether user is logged on or not) y Ejecutar con los privilegios más altos (Run with highest privileges).
  2. Desencadenadores (Triggers): Nuevo → Al iniciar el sistema (At startup); opcionalmente, Retrasar la tarea durante (Delay task for) 30 segundos para que la red esté lista.
  3. Acciones (Actions): Iniciar un programa, con la ruta completa del programa o script y la carpeta de trabajo en Iniciar en (Start in).
  4. Configuración (Settings): marque If the task fails, restart every (reiniciar si la tarea falla) con un intervalo de 1 minuto y hasta 999 intentos, y desactive Stop the task if it runs longer than (detener la tarea si se ejecuta durante más tiempo) en los programas que se ejecutan de forma continua.

La misma tarea desde PowerShell:

$action   = New-ScheduledTaskAction -Execute "C:\apps\collector\collector.exe" -WorkingDirectory "C:\apps\collector"
$trigger  = New-ScheduledTaskTrigger -AtStartup
$trigger.Delay = "PT30S"
$settings = New-ScheduledTaskSettingsSet -RestartCount 999 -RestartInterval (New-TimeSpan -Minutes 1) `
            -ExecutionTimeLimit ([TimeSpan]::Zero) -StartWhenAvailable
Register-ScheduledTask -TaskName "Collector" -Action $action -Trigger $trigger -Settings $settings `
            -User "SYSTEM" -RunLevel Highest

Start-ScheduledTask -TaskName "Collector"
Get-ScheduledTaskInfo -TaskName "Collector"   # LastTaskResult 0 = success

Método 2: Ejecutar cualquier programa como servicio con NSSM

NSSM (Non-Sucking Service Manager) convierte cualquier ejecutable en un servicio de Windows real, lo reinicia de inmediato si se cierra y puede escribir su salida de consola en archivos de log. Descárguelo de nssm.cc, copie nssm.exe (de la carpeta win64) en C:\Windows\System32 y luego ejecute:

# Example: a Node.js application
nssm install MyApp "C:\Program Files\nodejs\node.exe" "C:\apps\myapp\server.js"
nssm set MyApp AppDirectory C:\apps\myapp
nssm set MyApp AppStdout C:\apps\myapp\logs\out.log
nssm set MyApp AppStderr C:\apps\myapp\logs\error.log
nssm set MyApp AppRotateFiles 1
nssm set MyApp AppRotateBytes 10485760
nssm set MyApp Start SERVICE_AUTO_START
nssm start MyApp

nssm status MyApp
nssm restart MyApp
nssm edit MyApp       # graphical editor for all settings
nssm remove MyApp confirm

Para un script de Python, use la ruta de python.exe con el script como argumento; para Java, use java.exe con -jar app.jar. Si el programa necesita acceder a recursos compartidos de red o a un perfil de usuario, configure la cuenta en la pestaña Log on de nssm edit en lugar de LocalSystem.

Método 3: Configuración de recuperación para servicios existentes

Si el programa ya se instala como servicio (una base de datos, un servidor de juegos, un agente), indique a Windows que lo reinicie automáticamente cuando falle:

# Restart after 5 seconds on the first three failures; reset the failure counter after one day
sc.exe failure "MyService" reset= 86400 actions= restart/5000/restart/5000/restart/5000
sc.exe failureflag "MyService" 1
sc.exe config "MyService" start= auto
sc.exe qfailure "MyService"

Las mismas opciones están en la pestaña Recuperación (Recovery) del servicio en services.msc.

Programas que necesitan una ventana en el escritorio

Los servicios se ejecutan en una sesión aislada sin escritorio visible, por lo que los programas con interfaz gráfica que deben mostrar una ventana (algunas plataformas de trading, clientes de juegos o herramientas de automatización) no funcionan como servicios. En estos casos, active el inicio de sesión automático de un usuario dedicado con la herramienta Autologon de Sysinternals de Microsoft (guarda la contraseña cifrada), coloque un acceso directo al programa en shell:startup de ese usuario y, al salir de la sesión de Escritorio remoto, desconéctese en lugar de cerrar sesión. Excluya también a ese usuario de los límites de tiempo que cierran sesiones automáticamente.

Preguntas frecuentes

¿La tarea aparece como "En ejecución" (Running), pero el programa no funciona?

Compruebe que Iniciar en (o el AppDirectory de NSSM) esté configurado: muchos programas buscan sus archivos de configuración de forma relativa al directorio de trabajo. Revise también los logs del propio programa y, con NSSM, el archivo AppStderr.

¿El servicio se inicia y se detiene inmediatamente?

Ejecute exactamente el mismo comando de forma manual en una ventana de PowerShell para ver el error. En el caso de los servicios, revise también Visor de eventos → Registros de Windows → Sistema (Event Viewer → Windows Logs → System) y Aplicación (Application).

¿Siguen funcionando después de los reinicios de Windows Update?

Sí. Las tareas de inicio y los servicios automáticos vuelven a arrancar después de cada reinicio; precisamente por eso son mejores que una sesión de Escritorio remoto abierta. Consulte cómo administrar Windows Update para controlar cuándo se producen los reinicios.

¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor, la versión de Windows Server, el programa que desea ejecutar y el error exacto o la entrada del registro de eventos para que podamos localizar el problema más rápido.

¿Fue útil la respuesta?

Tutoriales relacionados