Початкова нестабільність у планувальнику завдань Microsoft?


3

Контекст: Microsoft Azure; Windows Server 2012 R2.

У мене є невелика кількість завдань у планувальнику. Всі позначені, на вкладці Налаштування, як "Якщо завдання вже запущено, застосовується правило слідувати:" Не запускати новий екземпляр "".

Це добре протягом декількох днів. Тоді планувальник з'являється, щоб запустити новий екземпляр кожного завдання під час запуску. Вони відображаються в диспетчері завдань поряд із вже запущеним завданням, але позначені як "Призупинено".

Це, здається, є загальною ознакою нестабільності системи. Невдовзі після цієї поведінки SQL Server починає погано поводитися.

Я перебуваю в процесі написання скрипту технічного обслуговування (який також повинен використовувати планувальник, більше того - жалість), який буде підраховувати примірники виробничих додатків і відправляти команду розробників sms, якщо в пам'яті є більше одного (один запущений) Це один короткий термін обходу. Довгострокове виправлення було б краще.

Хто-небудь зіткнувся з чим-небудь подібним і, якщо так, то яка фіксація?

Відповідь на пропозиції

Я міг би поставити

var currProcName = Process.GetCurrentProcess().ProcessName;
if (Process.GetProcessesByName(currProcName).Length > 1)
{
    Warn($"An instance of {currProcName} is already running. Only one instance of this application is allowed.");
    return;
}

або його еквівалент у всіх EXE. Однак у поточній установці цього ніколи не буде видати попередження, оскільки другий екземпляр EXE не запускається як такий, але з'являється в диспетчері завдань як "Призупинено".

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

У нас заплановано близько 20 завдань, деякі щохвилини, деякі кожні 5, деякі кожні 60.

Відповіді на запитання в коментарях №1

П: Що ви працюєте саме з планувальником завдань, як пакетний сценарій, файл exe, сценарій PowerShell або що?

A: Тільки EXEs, напр.

<Actions Context="Author">
  <Exec>
    <Command>Handler.exe</Command>
    <WorkingDirectory>C:\Web\Project</WorkingDirectory>
  </Exec>
</Actions>

П: Як у вас є налаштування задач у параметрах планувальника?

A: Зразкові налаштування з файлу XML:

  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>

Приклади тригерів з файлу XML

<Triggers>
  <CalendarTrigger>
    <Repetition>
      <Interval>PT1M</Interval>
      <Duration>P1D</Duration>
      <StopAtDurationEnd>false</StopAtDurationEnd>
    </Repetition>
    <StartBoundary>2016-03-09T14:20:00</StartBoundary>
    <ExecutionTimeLimit>PT30M</ExecutionTimeLimit>
    <Enabled>true</Enabled>
    <ScheduleByDay>
      <DaysInterval>1</DaysInterval>
    </ScheduleByDay>
  </CalendarTrigger>
</Triggers>

Відповіді на запитання в коментарях №2

Питання: Ви вимкнули, а потім увімкнули ці завдання?

Відповідь: Завдання регулярно вимикаються і знову включаються, коли застосовуються оновлення.

З: Чи були імпортовані завдання з файлу XML?

Відповідь: оригінальне завдання (на іншому сервері) було створено за допомогою графічного інтерфейсу. Результат експортувався до XML, переміщувався до поточного сервера, редагувався та імпортувався.

П: Якщо ви відтворюєте завдання, це виправляє проблему?

A: Ні.

Питання: Чи завершується завдання кодом виходу?

A: Якщо ви маєте на увазі "завершується завдання з Environment.Exit (n)?" тоді так. Однак значення не перевіряється, оскільки завдання визначається як EXE, а не як частина великої CMD.

Питання: Чи можливо, що заплановане завдання припинилося саме тоді, коли передбачається, що нове завдання почнеться?

В: Як би я це встановив?

Питання: Чи можуть два приклади одного і того ж завдання одночасно пояснювати нестабільність, яку ви бачите?

В: Я не впевнений, що я розумію це питання. Ні в якому разі ми не допускаємо одночасне виконання двох екземплярів. Нинішня ситуація полягає в тому, що Windows за власним вибором дозволяє запускати один екземпляр, а інший запускається, але в режимі "призупинено". Цікаво, що наш нинішній досвід полягає в тому, що призупинене завдання не може бути припинено. Тільки виконуване завдання може бути припинено.


Це, мабуть, тому, що ви - магніт-магніт;)
Bob

Що ви працюєте саме з планувальником завдань, як пакетний сценарій, файл exe, сценарій PowerShell або що? Як у вас є налаштування задач у параметрах планувальника? Знаючи все це також може мати значення. Я припускаю, що ви виконуєте виконуваний файл або щось, і ім'я цього процесу ви бачите в пам'яті є те, що вказує, що більше одного працює. Я думаю, ви повинні включити деталі налаштування запланованих завдань і те, з чим ви працюєте, і, можливо, знімки екрана того, що ви бачите, які вказують на проблему, і т.д.
Pimp Juice IT

1
@ITSnuggles так, хороший момент. Я додаду, як тільки я отримаю більшу плиту часу.
bugmagnet

1
Я хотів би представити це як коментар, але у мене немає репутації, тому я сподіваюся, що ви побачите його, перш ніж він буде видалений (моди дійсно не люблять невідповіді). Я пропоную включити історію завдань, а потім переглянути історію цього завдання. Це допоможе діагностувати проблему. Крім того, це нагадує мені про подібну проблему, яку я мав, але в Windows Server 2008. Я відправив повідомлення в technet, але не отримав задовільного відповіді: Заплановане завдання виконується двічі, помилка в планувальнику завдань
Jay

1
Запитання: (1) Ви вимкнули, а потім увімкнули ці завдання? (2) Чи були імпортовані завдання з файлу XML? (3) Якщо ви відтворюєте завдання, чи це виправляє проблему? (4) Чи закінчується завдання кодом виходу? (5) Чи можливо, що заплановане завдання припиняється саме тоді, коли має розпочатися нове завдання? (6) Чи можуть два приклади одного і того ж завдання одночасно пояснювати нестабільність, яку ви бачите?
harrymc

Відповіді:


0

Планувальник завдань і умови простою

Здається, існує два способи налаштування a Планувальник завдань Робота щодо Умови бездіяльності .

  1. Якщо StopOnIdleEnd встановлено на вірно , потім RestartOnIdle має бути вірно також, якщо бажаний результат завершити і перезапустити завдання .

    Велосипедний стан бездіяльності

    Якщо комп'ютер вмикається і вимикається з режиму очікування, можна   завершити і перезапустити завдання за допомогою наступних умов очікування.

    Щоб завершити і перезапустити завдання, як властивості, так і елементи повинні мати значення True :

    • Щоб завершити завдання, коли стан бездіяльності закінчується, встановіть StopOnIdleEnd власності або StopOnIdleEnd елемент в True.

    • Щоб перезапустити завдання, коли комп'ютер переходить у стан бездіяльності   знову встановіть RestartOnIdle власності або RestartOnIdle елемент до   Правда.


    Приклад конфігурації

    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>true</RestartOnIdle>
    </IdleSettings>
    

    Обидва вони повинні бути встановлені на Правда .


  1. Якщо бажаний результат - не буде припинено виконання завдання в режимі очікування , тоді ви захочете забезпечити обидва RestartOnIdle і StopOnIdleEnd встановлено на помилковий .

    Приклад конфігурації

    <IdleSettings>
      <StopOnIdleEnd>false</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    

Обидва вони повинні бути встановлені на помилковий .


@bugmagnet .... Я просто думав про щось інше. Можливо, ви не хочете, щоб процес зупинився на непрацюючому стані, і, отже, обидва налаштування на false будуть достатніми для вашої потреби. Я додам це до моєї відповіді, як тільки я почую від вас, і т.д. Я думаю, якщо ви хочете, щоб планувальник завдань зупинитися, якщо на умові простою, то ви, ймовірно, хочете його перезавантажити теж і, таким чином, має RestartOnIdle встановити помилково може бути, призупинені процеси залишаються там і, можливо, планувальник завдань не може бачити призупинений процес для Do not start a new instance і таким чином вам також потрібно дозволити перезавантаження.
Pimp Juice IT

Якщо RestartOnIdle Чи це робота, то я думаю Do not start a new instance теж повинна виконувати свою роботу, і, можливо, припиниться процес.
Pimp Juice IT

Я думаю, що для наших цілей ми ніколи не повинні «розглядати систему як непрацюючу, незалежно від [відсутності] активності користувачів або [відсутності] споживання ресурсів»
bugmagnet

@bugmagnet Великий, я додав до моєї відповіді, як я сказав, що я колись почув. Я ціную вас, слідуючи моїм радам і розкриваючи конфіг, і, здається, допомагає знайти причину потенційно і, сподіваюся, рішення. Я з нетерпінням чекаю почути зворотній зв'язок від вас стосовно цього питання і побажати вам великих успіхів !! З повагою ~
Pimp Juice IT

Гаразд, піде з вашою пропозицією. Це займе кілька днів, щоб дізнатися, чи зміни відбуваються чи ні. Я тільки що пройшов всі 25 запланованих завдань на нашому першому блакитному сервері. На другому буде трохи менше. Дякуємо, що знайшли час.
bugmagnet

0

Моя думка про вашу проблему полягає в тому, що вона викликана рядком:

<StopOnIdleEnd>true</StopOnIdleEnd>

Ось що я теоретизую: ваш сценарій:

  • Процес зупиняється в стані очікування у виклику ядра. У цьому стані його не можна зупинити.
  • Комп'ютер увійшов у стан бездіяльності, а потім вийшов з нього.
  • Планувальник завдань намагався зупинити процес, але тільки зупинив його у стані зомбі (зупинився, але не може припинити).
  • Завдання, позначене завершеним, планувальник завдань запустив нове.
  • Оскільки оригінальне завдання було, можливо, в середині операції SQL і може все ще тримати замки, поведінка бази даних SQL була порушена.

Рішення має бути встановлено StopOnIdleEnd до false. Існує ніяких підстав для припинення завдання, оскільки комп'ютер введено стан простою, однак коротко. Насправді, це дуже погана ідея брутально зупинити будь-яке завдання, яке є підключений до сервера SQL, оскільки він залишає поточну транзакцію незавершений і навіть не згорнутий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.