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