none
Programador de tareas - Crear tarea para ejecutar un bat

    Question

  • Hola:

    Me gustaría usar el programador de tareas gráfico de Windows 7 Professional para crear una tarea tal que cada noche a cierta hora se ejecute un fichero .bat creado por mí, situado en un subdirectorio de mi directorio personal. El fichero bat contiene una única orden para ejecutar un binario:
    "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump.exe" -P586 -uroot -pXXXXX --result-file="E:\home\miusuario\backups\%date:~6,4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%.sql" --databases pelis prueba1 prueba2 wiki facturas

    Este binario lo único que hace es una copia de unas bases de datos, guardándolo en un fichero de texto de órdenes sql.

    El bat funciona fenomenal, lo he ejecutado en una consola de comandos tanto con un usuario normal como ejecutando la consola como administrador, y funciona correctamente, generando el fichero de respuesta donde debe. Sin embargo, al crear una tarea con el programador, la tarea parece ejecutarse con normalidad siguiendo el horario programado, y el programador de tareas no me lanza ningún evento de error ni de nivel preocupante, todos los eventos son de nivel información, indicando que la tarea comienza, se lanza y termina satisfactoriamente, pero no aparece ningún fichero de resultados. Ejecutándola manualmente mediante el menú contextual "Ejecutar" ocurre lo mismo, no parece funcionar tampoco.

    Para crear la tarea ejecuto el programador de tareas con permisos de administrador, y creo una tarea normal, que se ejecutará con un usuario con privilegios de administrador, ejecutándose tanto si el usuario inició sesión como si no, configurada para Windows 7, Windows Server 2008 R2, y metiendo la contraseña del usuario cuando me la pide para aceptar la configuración. Como desencadenador tengo una diariamente a las 3:30 todos los días, estado habilitado. Como acción tengo iniciar un programa, con la ruta hasta el bat tal que así: "E:\home\miusuario\backups\mysqldump.bat", con las comillas incluídas, sin argumentos (no los necesita) y no tengo nada en el cuadro "iniciar en". En el resto de cosas, tengo la configuración por defecto. En uno de los eventos generados en una ejecución de la tarea pone lo siguiente: 

    El Programador de tareas completó correctamente la tarea "\MySQL Backup", instancia "{eaffb6b1-7d61-4dc5-bf8c-558ac9857ca8}", acción "C:\Windows\SYSTEM32\cmd.exe" con el código devuelto 1. El código devuelto 1 me da que pensar que, cuando el comando se ejecuta en la tarea, parece dar error, pero no tengo ni idea de cuál puede ser el problema.

    He intentado poner otro bat que haga un call "E:\home\miusuario\backups\mysqldump.bat" 1> "E:\home\miusuario\backups\a.txt" 2>&1 esperando poder redireccionar una posible salida de error a un fichero de texto y poder ver lo que pasa. He hecho entonces que la tarea ejecute ese nuevo script, pero me ha pasado lo mismo; la tarea aparentemente se ejecuta con normalidad, con código de retorno 1, y ni rastro de la respuesta del binario ni de texto en el fichero a.txt.

    ¿Podéis darme alguna idea de por qué me puede estar fallando?

    Sé que se puede programar una tarea también con el comando at de consola; no lo he probado así, pero entiendo que la interfaz gráfica me debería funcionar y me gustaría saber qué estoy haciendo mal.

    Muchas gracias por adelantado

    • Edited by AdminW7 Friday, January 10, 2014 7:54 PM Agrego información
    Friday, January 10, 2014 7:48 PM

Answers

  • El problema era que el usuario bajo el que se ejecutaba la tarea, a pesar de estar en el grupo Administradores, que tiene control total sobre el directorio de destino, no podía escribir ficheros en él.

    He cambiado el usuario que ejecuta la tarea a uno que sí tiene permisos para tal directorio, y le he activado la directiva de inicio de sesión para procesamiento por lotes, y parece que funciona bien ahora.

    Gracias.

    • Marked as answer by AdminW7 Wednesday, January 15, 2014 9:46 PM
    Wednesday, January 15, 2014 9:46 PM

All replies

  • El problema era que el usuario bajo el que se ejecutaba la tarea, a pesar de estar en el grupo Administradores, que tiene control total sobre el directorio de destino, no podía escribir ficheros en él.

    He cambiado el usuario que ejecuta la tarea a uno que sí tiene permisos para tal directorio, y le he activado la directiva de inicio de sesión para procesamiento por lotes, y parece que funciona bien ahora.

    Gracias.

    • Marked as answer by AdminW7 Wednesday, January 15, 2014 9:46 PM
    Wednesday, January 15, 2014 9:46 PM
  • Hola,

    He leido tu problema y tengo exactamente el mismo y no se como solucionarlo. No entiendo la solucion que añades al final asi que te agradeceria eternamente que me indicases como hacerlo.

    Mi problema va mas alla, ya que intento enviar por ftp un fichero csv, a traves del progrmador pero no hay manera. Tenia un problema de path en windows que ya solucioné, pero se mantiene el problema. Si lo ejecuto marcando la casilla "ejecutar tarea tanto si inicio sesion como si no" la tarea no se dispara, la marca como realizada pero no la dispara, en cambio sin marcar esta casilla la tarea se ejecuta, mal, pero se ejecuta.

    En mi caso, ademas, misteriosamente, me da un error de ftp al ejecutar el fichero.bat. Si no incluyo este archivo en la carpeta System32 no me lo ejecuta!! me dice que no lo encuentra y esta en una carpeta en c:.. no entiendo nada.

    Friday, April 25, 2014 9:00 AM
  • Hola alc46,

    En principio, veo mucha incertidumbre en lo que has dicho y no me termino de enterar de qué es lo que te funciona y qué es lo que no.

    Entiendo que tienes un bat que ejecuta comandos para operar con el cliente ftp. Y supongo que la tarea tiene que ejecutar el bat. Puesto que te está dando tanta guerra, yo iría muy poco a poco. Por ejemplo, yo vaciaría el bat  y pondría solamente dentro un comando que te escriba una linea en un fichero de texto, para que sea lo más simple posible. Y a partir de ahí, tu trabajo es hacer que la tarea funcione bien en las condiciones que tú quieres (y el resultado será que te escribe en el fichero de texto). Teniendo una prueba tan acotada ya puedo ayudarte mejor si te falla. Cuando consigas eso, ya pasa a lo del ftp.

    Lo que dices de system32, tampoco lo entendí, pero a lo mejor es un tema de rutas. Prueba a poner cada referencia a fichero (sea binario o no) con la ruta absoluta.

    Por último, respecto a lo del permiso para procesamiento por lotes del usuario que ejecuta la tarea, léete esto   http://technet.microsoft.com/es-es/library/cc755659(v=ws.10).aspx. Si sigues sin entenderlo, dime algo en este hilo y busco mejor cómo lo habilité yo.

    Un saludo, alc46

    Friday, April 25, 2014 10:07 AM
  • Hola Buenos días,

    he leído lo expuesto y es muy similar lo que me pasa, tengo un bat para realizar backup de una BD en MySQL pero al tratar de correrlo no tengo mensaje de error alguno.

    he verificado los permisos, pero en mi caso la tarea de programada el usuario que esta ejecutando es el administrador local del equipo y ningún usuario del dominio.

    Agradezco de ante mano tu atención.

    Slds.
    Oscar

    Monday, September 08, 2014 4:32 PM
  • Hola, Óscar:

    Según entiendo de tu mensaje, tienes un bat para hacer una copia de una base de datos mysql, y la tarea que tienes creada ejecuta el bat mencionado.

    Deberías probar a ejecutar el bat desde una consola usando el mismo usuario que va a ejecutar la tarea (y esto es importante; yo lo probé con otro usuario con menos privilegios pensando que sería suficiente, y resultó que dicho usuario sí tenía permisos de escritura sobre el directorio de destino, y funcionaba bien). Además, asegúrate de que tienes todas las rutas que figuran en el bat indicadas de forma absoluta (tanto las del binario a ejecutar, como la de posibles ficheros que se crearán, directorios etc). Si consigues hacerlo funcionar del modo que quieres desde consola y te aseguras de lo de los paths absolutos, acotarás el problema al entorno de la tarea.

    Si llegas a este punto, deberias asegurarte de que el usuario que ejecutará la tarea tiene activada la directiva de inicio de sesión para procesamiento por lotes. No te fíes de que el usuario sea el administrador local, compruébalo. Dicha directiva es el permiso para que se pueda ejecutar un proceso por lotes mediante una autenticación de usuario de proceso por lotes en vez de interactivo.

    Monday, September 08, 2014 7:33 PM