Как получить список запланированных задач и результатов последнего запуска в ColdFusion?
Мы пытаемся создать панель управления для наших заданий cron - CF, Java, SQLServer и т. Д., Чтобы мы могли видеть, когда что-то запускалось в последний раз, каков был результат, и когда они запланированы для запуска в следующем.
Есть ли способ с CFAdmin API или какой-то недокументированный <cfschedule>
хитрость, чтобы получить список:
- Какие задачи запланированы?
- Что было в последний раз?
- Удалось ли это?
- Когда планируется запустить его снова?
В настоящее время мы находимся на CF8, но через несколько недель перейдем на CF9.
3 ответа
Я сделал небольшое исследование для вас. Я нашел более старую ссылку, которая все еще действительна, по крайней мере, в CF8 и, вероятно, также в 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>
С http://www.bpurcell.org/blog/index.cfm?mode=entry&ENTRY=935
Это отвечает на ваши вопросы № 1 и № 4. Что касается #3, на это не может быть никакого ответа. Механизм запланированных задач ColdFusion просто загружает указанный URL-адрес в установленное время. Нет успеха или неудачи - он просто выполняет HTTP-запрос.
Надеюсь это поможет.
Есть возможность "Опубликовать" результаты работы. Ответ от HTTP-запроса может быть записан на файловый сервер, и он будет иметь значения последнего выполненного задания.
<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">
Затем вы можете проверить журнал по базе данных, если хотите. Поскольку это ответ со страницы, вы также можете получать и хранить ошибки и предупреждения.
@eric kolb прав - это способ сделать это программно. Если вы хотите больше контролировать реакцию списка, попробуйте следующий код (по сути, тот же, но в cfscript):
<cfscript>
scheduledTasksArray=ArrayNew(1);
taskService=createobject('java','coldfusion.server.ServiceFactory').getCronService();
scheduledTasksArray=taskservice.listall();
Кроме того, чтобы ответить на вопросы № 2 и № 3 (что является почти одним вопросом из двух частей, если вы все сделаете правильно): Когда задание будет выполнено, отправьте себе электронное письмо прямо вверху с надписью "ЭЙ! Я РАБОТАЮ!!!!" а потом еще одна поговорка "ЭЙ! Я СДЕЛАН!!!" внизу кода для задачи - вы также можете добавить временную метку, чтобы узнать, когда она началась и остановилась (регистрация этого в базе данных также работает). Кроме того, чтобы узнать, когда он будет запущен в следующий раз, просто взгляните на последний раз И поле "интервал", полученное из результатов вызова ServiceFactory. (Если вам нужно дальнейшее объяснение того, что я имею в виду, не стесняйтесь спрашивать.
Надеюсь, это поможет, если вы еще не поняли, что вам нужно