Я собрал исправление для запуска запланированного задания на моем веб-сервере, которое до сих пор работало достаточно хорошо.
Мне нужно было запускать работу каждые x
минуты на моем компьютере с IIS 7. Для этого я создал веб-страницу (runcronjob.aspx), которая содержит всю логику, которую я хочу запустить, проверяет время выполнения заданий в базе данных, время последнего выполнения, отправку электронной почты, запрос активного каталога и т. Д. Затем я использовал планировщик заданий. на моей рабочей станции (не веб-сервер), чтобы вызвать страницу, которую я сделал. У меня больше нет выделенной рабочей станции, которая всегда будет в сети, поэтому я бы хотел перенести запланированное задание на веб-сервер, и именно здесь я застреваю.
Веб-сервер представляет собой компьютер под управлением Windows 2008 x64 с IIS 7. Я попытался создать запланированное задание на веб-сервере так же, как на локальной машине, но он не работает. Запланированная задача вызывает IEXPLORE.EXE
с веб-страницей в качестве параметра "http://mydomain.com/cron/runcronjob.aspx".. Когда IE 7 запускается на веб-сервере, он запрашивает имя пользователя и пароль. Я также попытался запустить скрипт vbs локально на сервере:
runjob.vbs
Call LogEntry()
Sub LogEntry()
'Force the script to finish on an error.
On Error Resume Next
'Declare variables
Dim objRequest
Dim URL
Set objRequest = CreateObject("Microsoft.XMLHTTP")
'Put together the URL link appending the Variables.
URL = "http://mydomain.com/cron/runcronjob.aspx"
'Open the HTTP request and pass the URL to the objRequest object
objRequest.open "GET", URL , false
'Send the HTML Request
objRequest.Send
'Set the object to nothing
Set objRequest = Nothing
End Sub
Проблема, с которой я столкнулся в этом сценарии, заключается в том, что у меня есть настройка проверки подлинности форм на веб-сайте. Поэтому, когда этот скрипт запускается, он перенаправляет на страницу входа в систему вместо запуска кода в runcronjob.aspx. Чтобы обойти это, я добавил этот код в код за разделом Page_Load страницы входа в систему:
If Request.ServerVariables("LOCAL_ADDR") = Request.ServerVariables("REMOTE_ADDR") Then
FormsAuthentication.RedirectFromLoginPage("AD-ENT\accountToRunAs", False)
End If
Страница входа в систему выполняет код, но никогда не перенаправляется обратно в runcronjob.aspx для запуска этого кода.
У меня заканчиваются идеи.
EDIT:
Причина, по которой я делаю это таким «хакерским» методом, заключается в том, что у меня очень ограниченный доступ к веб-серверу, и это было все равно что выдергивать зубы, даже получая разрешение на запуск запланированной задачи на сервере. При этом такие варианты, как создание консольного приложения или службы Windows для запуска, могут оказаться затруднительными.