• Главная
  • Карта сайта
Не найдено

Як я зі службою планувальника завдань WebSitePanel боровся

Прилетіла нам заявка від користувача, що перестали в нього в WebSitePanel працювати заплановані завдання. Коли перестали працювати не відомо. Швидше за все, коли ми оновили панель до нової версії (з 2.0 до 2.1). У новій версії панелі, розробники вирішили вивести службу планувальника завдань в окремий сервіс Windows. Раніше він був частиною Enterprise сервера.

Думаю, швидше за все вилетіла ця служба, заходжу на сервер дивлюся, дійсно служба зупинена. Запускаю. Думаю ну все ОК, готуюся відписатися клієнту, дивлюся процеси - служби немає, обновляю оснащення services - служба зупинена. Для вірності пробую запустити її ще раз, той же результат.

Заходжу, подивитися що пише перегляд подій, з'являється дві події, перше що служба була несподівано завершена, друге що:

Application: WebsitePanel.SchedulerService.exe

Framework Version: v4.0.30319

Description: The process was terminated due to an unhandled exception.

Exception Info: System.NullReferenceException

Stack:

at WebsitePanel.EnterpriseServer.Scheduler.RunBackgroundTask (WebsitePanel.EnterpriseServer.BackgroundTask)

at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)

at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)

at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)

at System.Threading.ThreadHelper.ThreadStart ()

Дуже інформативно ... Лізу на форуми, там рекомендують порівняти файли конфігурації Enterprise сервера (web .config) і файли конфігурації шедулера - WebsitePanel.SchedulerService.exe. conf, в них повинні бути однакові рядки підключення і ключів шифрування.

Порівнюю, в конфіги шедулера немає ключів шифрування. Задоволений як слон, вставляю ключ, зберігаю кофіг, заходжу в служби, запускаю, перевіряю. Хрін !!! Служба зупинена. В логах ні чого не змінилося.

Ще рекомендують порівняти версії dll ок, порівнюю, все однаково.

Ну думаю, може перевстановити цей шедулера? Запускаю установник, він його не бачити, пропонує встановити заново. Трохи понервничал, як би програми встановлення гримнув Enterprise Server (тому що він повинен бути не активний в установнику, що б не переписати потрібні файли), зважився на установку, попередньо видаливши вручну службу, і всі файли планувальника. Безрезультатно.

Припускаю що справа в. net. На сервері стоїть 4.5, в конфігах всюди фігурує 4.0. Погрався з конфіга, спробувавши в них змінити версію. Служба не може стартанути, лається на невідому версію. net.

Гаразд. Припускаю, що потрібно встановити чисту версію. net 4, видаляю. net 4.5, заодно встановлюю все апдейти на сервер, їх накопичилося близько 70 штук. Перезапускати сервер, потираючи руки, що апдейти і зміна версії. net допоможе ... Те ж саме.

Поки думав, що робити далі, створив пару тестових завдань, і почав запускати службу. І виявив, що одне із завдань успішно встигла виконатися один раз, з 10 запусків завдання і служби. Хм ...

Ок, думаю пора подивитися що відбувається в базі даних, заходжу на сервері в базу, а там ...

Ок, думаю пора подивитися що відбувається в базі даних, заходжу на сервері в базу, а там

... Чорт ногу зломить від кількості таблиць, подивився по назвах, де фігурує Schedule, подивився що в таблицях, нічого такого не побачив. Побачив що всі завдання зберігаються в таблиці Schedule, і там вказані ID хостинг Спейс кому ці завдання належать. Тут же можна їх відключити змінивши колонку Enabled.

Тут же можна їх відключити змінивши колонку Enabled

Думаю потрібно спробувати все завдання відключити і подивитися, чи буде вивалюватися служба. Заходжу на сторінку панелі, в ній переходжу в хостинг спейс по його ID, відключаю завдання. Що б упевнитися, що саме в цю таблицю внесе зміни про включення / відключення завдання. Так зміни внесли. Зберігаю поточний стан таблиці в файл, і sql командної "Update Schedule set Enabled = 0 Where Enabled = 1" відключаю всі завдання.

Користуючись нагодою, подивився, що б все хостинг Спейс, в завданнях існували.

Думаючи, що більше проблем з SQL бути не може, йду на сервер з шедулера. Запускаю службу, хрін там ... Помилка та ж ...

ОК, WebSitePanel - проект з відкритим вихідним кодом, качаю вихідні з гітхаба, знаходжу в проекті код по сервісу Scheduler. У ньому знаходжу де викликається метод RunBackgroundTask (), додаю на нього обробник виключень, компілює, копіюю нові dll ки на сервер, запускаю службу, служба зупинена. Ноошібкаужедругая:

Application: WebsitePanel.SchedulerService.exe

Framework Version: v4.0.30319

Description: The process was terminated due to an unhandled exception.

Exception Info: System.NullReferenceException

at WebsitePanel.EnterpriseServer.Scheduler.RunBackgroundTask (WebsitePanel.EnterpriseServer.BackgroundTask)

at WebsitePanel.EnterpriseServer.Scheduler + <> c__DisplayClass3. <RunManualTasks> b__1 ()

at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)

at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)

at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)

at System.Threading.ThreadHelper.ThreadStart ()

Знаходжу, де в коді викликається метод RunManualTasks, і додаю на цю богодельні обробник виключень. Компілює, служба не вилітає, але і не працюють ні фіга ні які завдання ...

Починаю шукати, що роблять ці методи, з'ясовується, що вони викликають збережені процедури на SQL сервері. Припускаю, що може, не вистачає, який не будь збереженої процедури, порівнюю їх на робочому sql і тестовому, де планувальник працює. За кількістю - однакове. За вмістом одурієш перевіряти, їх там 450 штук.

Вирішую запустити оновлення бази, яке запускалося при оновленні бази до 2.1, і подивитися на помилки, серйозних помилок немає, і вони не пов'язані з збереженими процедурами, значить, і збережені процедури повинні бути в порядку, тому що вони оновлюються цим оновленням.

Розумію, що потрібно зрозуміти який запит, і яку відповідь приходять з sql сервера шедулера. На цей момент повних прав на sql у мене не було, за не потребою, а людина яка їх може дати відійшов. Що б час не втрачати, запускаю Wireshark на сервері де стоїть шедулера, і бачу, що останній викликає збережену процедуру - GetProcessBackgroundTasks, але відповідь йому не приходить, точніше приходить повідомлення про помилку.

Гаразд, запускаю цю збережену процедуру, вона що то повертає, заходжу в неї, що б подивитися з яких таблиць вона що бере, цілком логічно бере завдання з таблиці backgroundtasks. Дивлюся що в цій таблиці 3 завдання. Підозрюю що одне з них валить службу.

До цього моменту якраз підійшов чоловік який дав мені повні права на SQL. Запускаю sql profiler, і знімаю трасу запитів, бачу що дійсно служба валиться саме тоді коли повертається одне з цих завдань.

У завданні було вказано ID хостинг спейсу його створив і викликав. Порівняв з таблицею хостинг Спейс, а хостинг спейсу то такого немає ... Тому спочатку, коли дивився на таблиці scheduler, я й не запідозрив що може бути недобре, з базою даних. Оскільки для всіх хостинг Спейс я завдання відключив, і ні як не міг припустити, що в базі може зависнути завдання, після видалення користувача.

У загальному і цілому видалив я цю строчку з таблиці backgroundtasks, вона була залежна від ще одного рядка в іншій таблиці - BackgroundTaskStack. Після чого служба успішно стартонув. Судячи з усього при видаленні користувача з панелі, що щось пішло не так і залишилося його зависло завдання. Чому це сталося - загадка.

Ось такі ось, трудові будні. =)

Ну думаю, може перевстановити цей шедулера?
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью