Como obter a lista de tarefas programadas e a última execução resulta em Coldfusion?
-
22-09-2019 - |
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:
- Quais tarefas estão agendadas?
- Qual foi o último tempo de execução?
- Teve sucesso?
- Quando está programado para correr novamente?
Atualmente, estamos no CF8, mas estaremos atualizando para o CF9 dentro de algumas semanas.
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