В более ранних версиях ColdFusion был параметр URL, который может быть передан на любой запрос HTTP, чтобы изменить время ожидания сервера для запрашиваемой страницы. Возможно, вы предположили из запланированной конфигурации задачи, что HTTP-запрос запускает вашу задачу, поэтому он функционирует так же, как и любая другая страница. В тех ранних версиях вы бы только добавили &requesttimeout=900
к URL-адресу, и это дало серверу 15 минут для обработки этой задачи.
В более поздних версиях они поняли, что этот параметр URL-адреса является угрозой безопасности, но им нужен способ разрешить разработчикам объявлять, что отдельному HTTP-запросу все равно будет разрешено занятие дольше, чем таймаут по умолчанию, установленный в администраторе ColdFusion. Поэтому они переместили его из параметра URL в тег <cfsetting>
.
<cfsetting requesttimeout="900" />
Вы должны поместить cfsetting тег в верхней части страницы, а не помещать его внутри цикла, потому что это сброс общего допустимого времени от начала запроса, а не только с момента последнего cfsetting тега , Бен Надель написал статью в блоге об этом здесь: http://www.bennadel.com/blog/626-CFSetting-RequestTimeout-Updates-Timeouts-It-Does-Not-Set-Them.htm
Я не уверен, есть ли верхний предел времени ожидания запроса. Я действительно знаю, что в прошлом, когда у меня была очень долгая задача, сервер постепенно замедлился, в некоторых случаях, пока он не разбился. Я не уверен, что я ожидал бы переиндексации коллекций Solr, чтобы ухудшить производительность настолько плохо, я думаю, что мои задачи занимались некоторыми другими вещами, которые, вероятно, были в то время забиты памятью. В любом случае, если вы столкнетесь с этой проблемой, вам может понадобиться разделить ее на отдельные задачи для каждой коллекции и просто убедиться, что между задачами достаточно времени, чтобы каждый из них мог выполнить до следующего запуска.
EDIT: Ой! Я не знаю, как я пропустил тег cfsetting
в исходном вопросе. D'о! В любом случае, когда вы выполняете запланированное задание с помощью CF-администратора, он выполняет запрос cfhttp
для выполнения задачи. Так обычно выполняются запланированные задачи, и я подозреваю, что задача может выполняться внутри вашей собственной области приложения, но эффект заключается в том, что выполняются два отдельных запроса. Я не думаю, что на странице CFIDE есть тег cfsetting
, но я подозреваю, что человек может добавить его, если они захотят дольше дождаться завершения этой задачи.
EDIT: Хорошо, если вы хотите добавить cfsetting
в CFIDE, вам сначала нужно расшифровать шаблон, а затем добавить свою одну строку кода ..., которая может аннулировать вашу гарантию на сервере, но, вероятно, безопасно.;) Для дешифрования шаблона см.: Can I get the source of a hacked Coldfusion template? - и шаблон для редактирования: /CFIDE/administrator/scheduler/scheduletasks.cfm
.
Я не знаю, что есть лучший способ сделать это. Что касается вашего тайм-аута при запуске со страницы администрирования, это является доброкачественной ошибкой. Тайм-аут - это фактически страница администрирования, а не запланированная задача. Это происходит потому, что страница администратора пытается дождаться завершения запланированной задачи и имеет отдельный тайм-аут, чем таймаут запроса страницы (и в вашем случае тайм-аут запроса cfsetting). Если вы добавите некоторые записи в файл в своем коде, вы увидите, что работа действительно продолжает работать. –
Прохладный, спасибо за очистку. Я просто хотел быть уверенным, что я собираюсь сделать это правильно. –