Как определить, было ли запланированное задание выполнено автоматически или в браузере?

Я запускаю некоторый код в качестве запланированной задачи, настройка в CF Administrator.

Есть ли способ указать в коде, что код выполнялся как запланированная задача, выполнялся ли он нажатием на значок запуска в области запланированных задач CF Administrator или он вызывался непосредственно в браузере?

Добавление дополнительных переменных не будет работать?

1 ответ

Решение

Из тестовой ссылки в админке CF

Если вы спрашиваете, можете ли вы определить разницу между запланированной задачей, выполняемой вручную, щелкнув ссылку теста в администраторе Coldfusion или запустить по расписанию, вы можете включить ведение журнала запланированных задач. Каждый раз, когда задача запускается пользователем, запись в журнале скажет [name of job] Executing because of user request at {timestamp}, Если он запустился естественным образом, запись в журнале скажет [name of job] Executing at {timestamp}

Я искал способ сказать по коду и не могу ничего найти. Это будет зависеть от точности планировщика, но вы можете посмотреть, равно ли now() времени расписания. Что-то вроде (псевдокод):

<!--- disclaimer: I've heard stories that cfschedule sometimes runs a little late --->
<cfset scheduleTime = "2:00 am">
<cfif cgi.HTTP_USER_AGENT eq "CFSCHEDULE" and timeFormat(now(), "h:mm tt") eq scheduleTime>
   <!--- ran naturally --->
<cfelse>
   <!--- ran by force --->
</cfif>

Из браузера

Если вы хотите узнать, было ли запланированное задание выполнено по расписанию или файл был загружен браузером, вы можете посмотреть на cgi.HTTP_USER_AGENT, если он запущен планировщиком, он будет равен CFSCHEDULE в противном случае он будет равен тому, что клиент настроен на отправку.

Может быть, Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11

или если вам повезло, что бот ударил его, что-то вроде: Mozilla/5.0 (compatible; MJ12bot/v1.4.3; http://www.majestic12.co.uk/bot.php?+)

Можно подделать запрос клиента или сервера, чтобы пользовательский пользовательский агент сказал CFSCHEDULE, но это маловероятно.

на заметку...

Пользовательский агент по умолчанию для cfhttp - "COLDFUSION", на случай, если вам это интересно.

Другие вопросы по тегам