batch-file - running - windows scheduler batch file
El Programador de tareas de Windows no inicia la tarea de archivo por lotes (15)
Tengo un archivo por lotes con el siguiente código para detener e iniciar el servicio de informes SQL:
net stop "SQL Server Reporting Services (MSSQLSERVER)"
timeout /t 10
net start "SQL Server Reporting Services (MSSQLSERVER)"
He configurado la tarea programada para que se ejecute a diario, actualmente se ejecuta como SISTEMA con los privilegios más altos establecidos. He configurado la opción de inicio en carpeta en la acción y, en general, todo parece estar configurado correctamente. Pero cuando ejecuto la tarea, no parece que ocurra nada, dice que la tarea se ejecutó, pero no puedo ver que el servicio se haya reiniciado como se espera.
¿Puede alguien dirigirme a lo que me falta? Gracias
Asegúrese de configurar correctamente las opciones ''Iniciar en'' y ''Programa / script'' . Si su dirección de archivo es: C: / Temp / foo.bat, configure la opción ''comenzar en'' en ''C: / Temp'' y la opción ''Programa / script'' en ''foo.bat''.
Para configurar la opción ''Comenzar en'': haga clic derecho en la tarea en el programador de tareas > Properties > Actions > Edit.
Si esto solo no funciona, intente mover el archivo .bat a un directorio con permisos básicos (tal vez un directorio compartido, por ejemplo).
Tuve un problema en el que mi archivo .bat estaba ubicado en una carpeta con algunos permisos restrictivos, por lo que solo mi cuenta de usuario podía acceder a él. A pesar de que había configurado el programador de tareas para usar mis credenciales, todavía fallaba. Mover el archivo .bat a otro directorio solucionó el problema.
En un sistema Windows que soporta runas
. Primero, ejecute su programa de forma independiente ejecutándolo desde una línea de comandos que se ejecutó como ese usuario, como seguir
runas /user:<domain/username> cmd
Luego, en esa nueva línea de comandos, cd
a la ruta desde donde espera que el iniciador de tareas inicie su programa y escriba los argumentos completos, por ejemplo.
cd D:/Scripts/
, luego ejecute
C:/python27/pthon.exe script.py
Cualquier error que esté siendo suprimido por el programador de tareas debería aparecer en la salida de la línea de comandos y facilitará la depuración de las cosas.
Establecer ''Programa / script'' -> archivo.bat establecer ''Comenzar en'' el resto de la ruta (archivo.bat)
Este es un hilo bastante antiguo, pero el problema sigue siendo el mismo.
Probé varias cosas, ninguna de ellas funcionó.
- Agregado un inicio en ruta (sin comillas)
- Se eliminó la ruta completa del archivo por lotes en el campo Programa / Script, etc.
- Se agregó
C:/Windows/system32/cmd.exe
al Programa y se agregó/c myscript.bat
al campo de argumentos.
Esto es lo que funcionó para mí.
Campo de programa / script - cmd
Añadir argumentos - / c myscript.bat
Comenzar en: Ruta a myscript.bat
La solución es que debe desmarcar (desactivar) la opción "Ejecutar solo si el usuario ha iniciado sesión".
Después de ese cambio, comienza a funcionar en mi máquina.
Mi aplicación no se pudo iniciar a través del "Programador de tareas".
El error en el "Visor de eventos" es: System.IO.DirectoryNotFoundException
El "Programador de tareas" intenta ejecutar esta aplicación con el usuario "SISTEMA". El problema fue que no se asignó una "unidad de red" para el usuario "SISTEMA". Entonces, lo que hice fue crear un archivo ".bat" y mapear la "unidad de red" antes de iniciar la aplicación:
net use T: //172.20.2.215/images
cd C:/MyApplication
start MyApplication.exe
Así que primero revise sus registros: "Visor de eventos" -> Registros de Windows -> Aplicación
Mi problema fue causado por OneDrive. OneDrive estaba sincronizando la carpeta donde vivía mi archivo por lotes, y eso parece impedir que el Programador de tareas lo ejecute. (¿Nadie en MS prueba este tipo de cosas?)
De todos modos, moviendo mi archivo por lotes a una carpeta que no estaba en OneDrive, el Programador de tareas podría iniciar el archivo por lotes.
Para mí, el problema se debió a que .bat
incluía un cd
en una unidad de red. Esto falló, y luego la llamada posterior al programa en esa unidad de red no hizo nada.
Descubrí esto agregando > log.txt
en el campo Agregar argumentos de la ventana Editar acción para la tarea.
Para mi fue problema de gatillo. Por defecto debería estar On a Schedule
en la pestaña de disparo. Había seleccionado At log on
y luego estaba esperando para ejecutar la tarea. Como su nombre lo indica en el inicio de sesión, significa que debe cerrar sesión e iniciar sesión.
Intenta ponerlo en un horario y dispararlo cada minuto.
Pruebe el siguiente código:
Archivo de lote.bat
cd c:/batchfilepath
net stop "SQL Server Reporting Services (MSSQLSERVER)"
timeout /t 10
net start "SQL Server Reporting Services (MSSQLSERVER)"
Tuve el mismo problema y ninguna de las soluciones funcionó. Cuando revisé el historial me di cuenta del problema. Tuve esta advertencia
Task Scheduler did not launch task "/TASK_NAME" because instance "{34a206d4-7fce-3895-bfcd-2456f6ed6533}" of the same task is already running.
En la pestaña de configuración hay una opción desplegable para "Si la tarea ya se está ejecutando, entonces se aplica la siguiente regla:" y el valor predeterminado es "No iniciar una nueva instancia". Cambie eso a "Ejecutar una nueva instancia en paralelo" o "Detener la instancia existente" en función de lo que realmente necesita hacer.
Sé que es un tema antiguo y las soluciones múltiples son buenas aquí, esto es lo que funcionó para mí. Espero eso ayude.
Tuvo el mismo problema, asegúrese de marcar "Ejecutar solo cuando el usuario está conectado", al menos eso es lo que hizo que mi archivo bat volviera a estar vivo.
Una solución es que puede ejecutar su archivo ''.bat'' con el archivo ''.vbs'' y puede ejecutar este archivo vbs en el programador de Windows .
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("cron_jobs.bat"), 0, True
Puedes hacer esto y espero que solucione tu problema.
Yo tuve el mismo problema. Creo que es un problema de privilegio. Si ha seleccionado "Ejecutar solo cuando el usuario ha iniciado sesión" seleccionado, no ocurrirá.
Espero que ya lo hayas descubierto, pero quería registrarlo aquí para la siguiente persona que haya perdido horas con esto.
¡Perdí mucho tiempo en este tonto asunto!
agregue un comando de CD al lugar donde reside su archivo por lotes en la primera línea de su archivo por lotes y vea si resuelve el problema.
cd D:/wherever/yourBatch/fileIs
CONSEJO: utilice rutas absolutas, idealmente las rutas relativas no deberían ser un problema, pero el programador tiene dificultades para entenderlas.