Pergunta

Estamos tentando construir um painel para nossos trabalhos Cron ---- CF, Java, SQLServer etc. para que possamos ver quando as coisas foram executadas por último, qual foi o resultado e quando estão programadas para correr a seguir.

Existe uma maneira com a API CFADMIN ou alguma não documentada <cfschedule> truque para obter uma lista de:

  1. Quais tarefas estão agendadas?
  2. Qual foi o último tempo de execução?
  3. Teve sucesso?
  4. Quando está programado para correr novamente?

Atualmente, estamos no CF8, mas estaremos atualizando para o CF9 dentro de algumas semanas.

Foi útil?

Solução

Eu fiz uma pequena pesquisa sobre isso para você. Encontrei uma referência um pouco mais antiga que ainda é válida, pelo menos no CF8 e presumivelmente no CF9.

<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>

A partir de http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=935

Isso responde às suas perguntas #1 e #4. Quanto ao #3, não pode haver resposta para isso. O mecanismo de tarefa programado da Coldfusion está apenas carregando o URL especificado no horário prescrito. Não há sucesso ou falha - ele simplesmente executa uma solicitação HTTP.

Espero que isto ajude.

Outras dicas

É possível "publicar" os resultados do trabalho. A resposta da solicitação HTTP pode ser gravada no servidor de arquivos e que terá os valores do último trabalho de execução.

<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">

Em seguida, você pode verificar o log no banco de dados, se quiser. Como é a resposta da página, você também pode obter erros e avisos aqui.

@eric kolb está certo - essa é a maneira de fazê -lo programaticamente. Se você deseja mais controle sobre como a lista reage, tente o seguinte código (essencialmente o mesmo, mas no CFScript):

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

Além disso, para responder #2 e 3 (que é praticamente apenas uma pergunta de duas partes, se você fizer certo): quando a tarefa for executada, envie um e-mail bem no topo dizendo "Ei! Estou correndo! !!! " E então outro ditado "Ei! Eu terminei !!!" Na parte inferior do código da tarefa - você também pode adicionar um registro de data e hora para saber quando ele começou e parou (registrar isso em um banco de dados também funciona). Além disso, para saber quando será executado em seguida, basta dar uma olhada na última vez e o campo "intervalo" voltou dos resultados da chamada do serviço. (Se você precisar de mais explicações sobre o que quero dizer com isso, fique à vontade para perguntar.

Espero que isso ajude se você ainda não descobriu o que precisava

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top