19

Estamos tratando de construir un tablero para nuestros trabajos cron ---- CF, Java, SQLServer, etc. para que podamos ver cuándo se ejecutaron las cosas por última vez, cuál fue el resultado y cuándo se ejecutarán siguiente.¿Cómo obtener la lista de tareas programadas y los resultados de la última ejecución en ColdFusion?

¿Hay alguna manera con la API CFAdmin o algún indocumentado <cfschedule> truco para obtener una lista de:

  1. ¿Qué tareas se han programado?
  2. ¿Cuál fue el último tiempo de ejecución?
  3. ¿Lo consiguió?
  4. ¿Cuándo está programado para ejecutar nuevamente?

Actualmente estamos en CF8, pero mejoraremos a CF9 dentro de unas semanas.

+2

Muy buena pregunta. Me encantaría conseguir que la misma información – Jason

+0

cualquier posibilidad de que su tablero termine en riaforge? eso suena genial – Antony

Respuesta

28

Hice un poco de investigación sobre esto para usted. Encontré una referencia algo más antigua que todavía es válida, al menos en CF8 y presumiblemente en CF9 también.

<cfobject type="JAVA" action="Create" name="factory" class="coldfusion.server.ServiceFactory"> 
<cfset allTasks = factory.CronService.listAll()/> 
<cfloop index="i" from="1" to="#ArrayLen(allTasks)#"> 
    <cfdump var="#allTasks[i]#" /> 
</cfloop> 

De http://www.bpurcell.org/blog/index.cfm?mode=entry&ENTRY=935

esto responda a sus preguntas # 1 y # 4. En cuanto al n. ° 3, no puede haber respuesta a eso. El motor de tareas programadas de ColdFusion solo está cargando la URL especificada en el momento prescrito. No hay éxito o falla, simplemente realiza una solicitud HTTP.

Espero que esto ayude.

+0

Niza, +1. Yo optaría por '', sin embargo, me parece más fácil leer. – Tomalak

+0

Impresionante.Exactamente lo que estaba tratando de lograr. Creo que crearé una tabla en el db que pueda contener los estados de ejecución/falla para estos trabajos. Establézcalo como 'en ejecución' cuando se inicie, y cuando llegue a su finalización, configúrelo como 'éxito' –

+2

Railo 3+ y CF10 + ofrecen una ** lista ** acción: '' ' '' ' – modius

1

Es posible "Publicar" los resultados del trabajo. La respuesta de la solicitud HTTP se puede escribir en el servidor de archivos, y eso tendrá los valores del último trabajo de ejecución.

<cfschedule action = "update" 
    task = "TaskName" 
    operation = "HTTPRequest" 
    url = "/index.cfm?action=task" 
    startDate = "#STARTDATE#" 
    startTime = "12:00:00 AM" 
    interval = "Daily" 
    resolveURL = "NO" 
    requestTimeOut = "600" 
    publish = "yes" 
    path = "#PATH#" 
    file = "log_file.log"> 

Luego puede verificar el registro en la base de datos si lo desea. Dado que es la respuesta de la página, también puede obtener y almacenar errores y advertencias aquí.

0

@eric kolb tiene razón, esa es la manera de hacerlo programáticamente. Si desea más control sobre cómo reacciona la lista, pruebe el siguiente código (esencialmente el mismo, pero en cfscript):

<cfscript> 
scheduledTasksArray=ArrayNew(1); 
taskService=createobject('java','coldfusion.server.ServiceFactory').getCronService(); 
scheduledTasksArray=taskservice.listall(); 

También, para responder a # 2 y # 3 (que es más o menos solo una pregunta de dos partes si lo haces bien): Cuando la tarea se ejecuta, envíate un correo electrónico directamente a la parte superior que diga "¡HEY! ¡ME FUNCIONO!" y luego otro diciendo "¡HEY! ¡HE HECHO!" en la parte inferior del código para la tarea: también puede agregar una marca de tiempo para indicar cuándo comenzó y se detuvo (también funciona el inicio de sesión en una base de datos). Además, para saber cuándo se ejecutará a continuación, solo eche un vistazo a la última vez Y el campo "intervalo" se recuperó de los resultados de la llamada de ServiceFactory. (Si necesita una explicación más detallada de lo que quiero decir con esto, no dude en preguntar.

Esperanza esto ayuda si no se ha dado cuenta de lo que necesitaba ya

Cuestiones relacionadas