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.
| Método | Ideal para | Se reinicia si falla | Requiere un escritorio con sesión iniciada |
|---|---|---|---|
| Programador de tareas "Al iniciar el sistema" | Scripts y programas de consola | Sí (opciones de reintento) | No |
| Servicio con NSSM | Aplicaciones de consola que se ejecutan de forma continua (Node.js, Python, Java, servidores de juegos) | Sí, de inmediato | No |
| Inicio de sesión automático + carpeta Inicio | Programas que necesitan una ventana visible o interfaz gráfica | No | Sí |
Abra taskschd.msc y elija Crear tarea (Create Task), no "Crear tarea básica":
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
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.
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.
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.
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.
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).
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.