0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44

Перезапуск службы при достижении 80% загрузки ЦП

11.02.2023, 15:12. Показов 7396. Ответов 87

Студворк — интернет-сервис помощи студентам
Всем добрый день. Может, у кого есть готовый скрипт на PS или VBS, который бы перестартовывал определённую службу при загрузке процессора в 80%, например?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2023, 15:12
Ответы с готовыми решениями:

Перезапуск службы при наличии файла в папке
Добрый день уважаемые форумчане. Появилась необходимость автоматизировать один из процессов. А в частности перезапуск одной очень не...

Скрипт убивающий процесс при достижении порога загрузки
Здравствуйте! Сделал вот такую штуку: $sleepseconds = 1 $numcores = 4 while($true) { $cpu1 = (Get-Process -Name...

Скрипт завершения процесса при достижении порога загрузки процессора
Здравствуйте! Помогите накидать скрипт, который завершает процесс по имени, при достижении определенного порога загрузки процессора. ...

87
30 / 23 / 7
Регистрация: 19.09.2018
Сообщений: 196
23.02.2023, 14:39
Студворк — интернет-сервис помощи студентам
Вы просите скрипт на PS или VBS, моё решение на PS было перемещено в тему PS
1
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
23.02.2023, 14:51
Vovsla, вы к кому обращаетесь? ТС и так отметил там ваш пост как решение (хоть это и не так, т. к. запрошен мониторинг). Что вам тут ещё надо?
0
30 / 23 / 7
Регистрация: 19.09.2018
Сообщений: 196
23.02.2023, 14:53
FlasherX, не обратил внимания, что мой ответ был замечен ТС
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44
23.02.2023, 15:02  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
(хоть это и не так, т. к. запрошен мониторинг)
Я просто пока не понял, как это запускать, все жизнь на линуксе сидел.
Просто та ветка мне не очень нужна. Мне проще на vbs-bat.
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44
23.02.2023, 20:27  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
опробуем множить:
Чот все равно не работает.
Миниатюры
Перезапуск службы при достижении 80% загрузки ЦП  
0
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
23.02.2023, 21:21
А если с повышением запускать?
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44
23.02.2023, 21:26  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
А если с повышением запускать?
Так уже.
Миниатюры
Перезапуск службы при достижении 80% загрузки ЦП  
0
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
24.02.2023, 15:18
А Process.exe лежит в D:\1 ?
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44
24.02.2023, 15:19  [ТС]
Да.
0
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
24.02.2023, 18:44
process -k aida_bench64.dll не завершает процесс?
Если нет, то меняем в коде process -k на taskkill/f /pid.

А не устроит, случаем, вариант сопоставления общей нагрузки с именем процесса?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Const Seconds = 4, Percent = 20, Process = "wmiprvse.exe"
Set oWSH = CreateObject("WScript.Shell")
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set SINK = WSH.CreateObject("WbemScripting.SWbemSink", "SINK_")
oWMI.ExecNotificationQueryAsync SINK, "SELECT * FROM __InstanceModificationEvent " &_
"WITHIN " & Seconds & " WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_" &_
"Processor' AND TargetInstance.PercentProcessorTime >=" & Percent
Do: WSH.Sleep 8^10 :Loop
 
Sub SINK_OnObjectReady(x, o)
   oWSH.Run "taskkill /f /im " & Process, 0
End Sub
0
30 / 23 / 7
Регистрация: 19.09.2018
Сообщений: 196
25.02.2023, 18:43
Цитата Сообщение от gluk6 Посмотреть сообщение
Я просто пока не понял, как это запускать, все жизнь на линуксе сидел.
Просто та ветка мне не очень нужна. Мне проще на vbs-bat.
Мне кажется, что на PS скрипт будет гораздо проще.
Есть множество способов выполнить код PS:
1. открыть консоль PS и выполнить код там
2. настроить Execution Policy для запуска скриптов
3. запустить PS скрипт с помощью powershell -command "Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Unrestricted -Command "Script.ps1"'

Простейший способ запустить PS скрипт с правами Админа без настройки Execution Policy - использовать нижеуказанный JS скрипт.
Скрипт ищет рядом с собой скрипты PS, начало названия которых совпадают с названием JS скрипта и запускает последний найденный PS скрипт
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
WshShell = WScript.CreateObject("WScript.Shell")
FSO = WScript.CreateObject("Scripting.FileSystemObject")
WshShell.CurrentDirectory = FSO.GetParentFolderName(WScript.ScriptFullName)
 
 
 
PSPath = undefined
for (i=0; i <= WScript.Arguments.Length - 1; i++) {
    if (WScript.Arguments(i).match("^/PSPath:")) {PSPath = WScript.Arguments(i).replace("/PSPath:", "")}
}
 
PSPath = PSPath || PSSearch()
 
if (PSPath.match(/\[|\]/g)) {
    WshShell.Popup("Script path must not contain square brackets\r\nThe script will complete", 0, WScript.ScriptName, 4096)
    WScript.Quit()
}
 
try {WshShell.RegRead("HKEY_USERS\\S-1-5-19\\Environment\\TEMP")} catch (e) {
    WScript.CreateObject("Shell.Application").ShellExecute(WScript.FullName, '"' + WScript.ScriptFullName + '" /elevate "/PSPath:' + PSPath + '"', "", "runas", 0)
    WScript.Quit()
}
 
WshShell.Run("powershell -command \"Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Unrestricted -Command " + PSPath.replace(/([\s(){}])/g, "`$1") + "'\"")
 
 
 
WScript.Quit()
 
 
 
//~ ------------------------------------------------------------------- PSSearch -------------------------------------------------------------------
function PSSearch() {
    var ScriptName, PSName
 
    ScriptName = WScript.ScriptName.replace("." + FSO.GetExtensionName(WScript.ScriptName), "")
 
    while (!PSName) {
        Result = WshShell.Exec('%COMSPEC% /c dir "' + FSO.BuildPath(WshShell.CurrentDirectory, ScriptName) + '*.ps1" /b /o:n')
        while (!Result.StdOut.AtEndOfStream) {PSName = Result.StdOut.ReadLine()}
        if (!PSName) {
            if (WshShell.Popup("PS1 file not found by mask\r\n\r\n" + '"' + FSO.BuildPath(WshShell.CurrentDirectory, ScriptName) + '*.ps1"\r\n\r\nDo you want to repeat search?',
                    0, WScript.ScriptName, 4096 + 5) == 2) {
                WScript.Quit()
            }
        }
    }
    return FSO.BuildPath(WshShell.CurrentDirectory, PSName)
}
Если нужно постоянное отслеживание и перезапуск, можно так
PowerShell
1
2
3
4
5
6
7
8
9
While(1) {
    $ID = (Get-Process | Where {$_.Name -eq 'notepad' -and $_.CPU -gt 0}).Id
    if ($ID) {
        Stop-Process -Id $ID -Force
        Wait-Process -Id $ID
        notepad
    }
    Start-Sleep -S 1
}
0
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
26.02.2023, 00:12
Цитата Сообщение от Vovsla Посмотреть сообщение
Простейший способ запустить PS скрипт с правами Админа без настройки Execution Policy - использовать нижеуказанный JS скрипт.
Скрипт ищет рядом с собой скрипты PS, начало названия которых совпадают с названием JS скрипта и запускает последний найденный PS скрипт
Без обид, но сверхизбыточный код на простейший никак не тянет. Зачем эта куча лишних манипуляций, не совсем понятно.
И почему "без настройки", если в 24 строка говорит об обратном?
0
30 / 23 / 7
Регистрация: 19.09.2018
Сообщений: 196
26.02.2023, 12:26
FlasherX, простейший способ, а не код, простота в удобстве использования. С помощью данного JS скрипта можно запустить PS скрипт с любым именем, достаточно чтобы JS и PS скрипты были с одним именем.

Цитата Сообщение от FlasherX Посмотреть сообщение
И почему "без настройки", если в 24 строка говорит об обратном?
Настройка "Execution Policy" заключается в изменениях параметров системы. В строке 24 параметры системы не меняются, политика "Unrestricted" используется только для запуска конкретного скрипта, при этом настройки "Execution Policy" остаются без изменений
0
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
26.02.2023, 19:10
Цитата Сообщение от Vovsla Посмотреть сообщение
простейший способ, а не код
Из слов "использовать нижеуказанный JS скрипт." можно понять, что остальные способы менее просты, что есть неправда. Проще сделать гибрид, и куда более короткий.

Цитата Сообщение от Vovsla Посмотреть сообщение
В строке 24 параметры системы не меняются
Применение настройки (установки) политики для текущей сессии никуда от этого не девается.
0
1391 / 848 / 92
Регистрация: 08.02.2017
Сообщений: 3,623
Записей в блоге: 2
11.03.2023, 16:03
Цитата Сообщение от FlasherX Посмотреть сообщение
WMI нельзя применять для перезапуска себя же (winmgmt)
Пробемма, наверное в том, что отваливается oWMI при перезапуске и нужно ее реинициализировать после перезапуска..
0
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
12.03.2023, 05:57
testuser2, нет, это не поможет. Там комплексная проблема.
0
1391 / 848 / 92
Регистрация: 08.02.2017
Сообщений: 3,623
Записей в блоге: 2
12.03.2023, 13:52
Немного изменил запрос исходя из информации. Конечно могут быть какие-то проблеммы с неправильным определением нагруженности или подвисанием самого WMI, но может быть как-то ближе к истине.. ) Тестировал на Файрфоксе, не мог ни как заставить, чтобы убивались отдельные вкладки, мочит весь Фиерокс.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Const Seconds = "4", Percent = "20", ProcName = "wmiprvse"
Set oWSH = CreateObject("WScript.Shell")
' Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set SINK = WSH.CreateObject("WbemScripting.SWbemSink", "SINK_")
call WMIinit()
 
Do: WSH.Sleep 8^10 :Loop
 
sub WMIinit()   
    With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
        .ExecNotificationQueryAsync SINK, "SELECT * FROM __InstanceModificationEvent " & _
        "WITHIN " & Seconds & " WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfProc_Process' " & _
        "AND TargetInstance.Name LIKE '" & ProcName & "%' " & _
        "AND TargetInstance.PercentProcessorTime >= " & Percent
    end with
end sub
 
Sub SINK_OnObjectReady(x, o)
   set oTI = x.TargetInstance
   oWSH.Run "taskkill /f /pid " & oTI.IDProcess, 0
   ' oTI.GetObjectText_ 'полная информация о процессе
   WScript.Sleep 1000
   WMIinit
End Sub
Интересное свойство объекта "TargetInstance" .GetObjectText_ выдает такую информацию по процессу.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
instance of Win32_PerfFormattedData_PerfProc_Process
{
  CreatingProcessID = 7876;
  ElapsedTime = "1550";
  HandleCount = 1601;
  IDProcess = 9940;
  IODataBytesPersec = "41052093";
  IODataOperationsPersec = "2688";
  IOOtherBytesPersec = "238";
  IOOtherOperationsPersec = "7";
  IOReadBytesPersec = "40143663";
  IOReadOperationsPersec = "1693";
  IOWriteBytesPersec = "908429";
  IOWriteOperationsPersec = "994";
  Name = "firefox#4";
  PageFaultsPersec = 748;
  PageFileBytes = "241373184";
  PageFileBytesPeak = "335044608";
  PercentPrivilegedTime = "11";
  PercentProcessorTime = "27";
  PercentUserTime = "16";
  PoolNonpagedBytes = 154192;
  PoolPagedBytes = 1230080;
  PriorityBase = 8;
  PrivateBytes = "241373184";
  ThreadCount = 74;
  VirtualBytes = "2202267549696";
  VirtualBytesPeak = "2218881396736";
  WorkingSet = "328122368";
  WorkingSetPeak = "404135936";
  WorkingSetPrivate = "207376384";
};
0
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
12.03.2023, 15:21
Цитата Сообщение от testuser2 Посмотреть сообщение
Немного изменил запрос исходя из информации.
По ссылке приведена формула. PercentProcessorTime нельзя сравнивать с ЦП процесса.
И зачем тут отдельная процедура WMIinit, если убивается процесс, а не служба?
0
1391 / 848 / 92
Регистрация: 08.02.2017
Сообщений: 3,623
Записей в блоге: 2
12.03.2023, 16:15
Цитата Сообщение от FlasherX Посмотреть сообщение
PercentProcessorTime нельзя сравнивать с ЦП процесса.
Фразу
Цитата Сообщение от gluk6 Посмотреть сообщение
службу при загрузке процессора в 80%, например?
можно истолковать по разному, тем более что там есть слово "например".
Цитата Сообщение от FlasherX Посмотреть сообщение
И зачем тут отдельная процедура WMIinit
На всякий, для реинициализации синка, может быть это и не надо. Вообще речь видимо о чем-то вот том
Цитата Сообщение от gluk6 Посмотреть сообщение
Все равно мало показывает, а мне надо, чтобы отлавливался вот этот параметр.
0
6998 / 2883 / 1109
Регистрация: 06.06.2017
Сообщений: 9,780
12.03.2023, 22:08
Цитата Сообщение от testuser2 Посмотреть сообщение
можно истолковать по разному
Нельзя. Тем более при наличии указанного скриншота.
Цитата Сообщение от testuser2 Посмотреть сообщение
На всякий, для реинициализации синка, может быть это и не надо.
Вопрос без условия цитировать не надо, ибо в нём вся суть. Вот именно, что не надо.
Цитата Сообщение от testuser2 Посмотреть сообщение
Вообще речь видимо о чем-то вот том
К реинициализации это вообще никак не относится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2023, 22:08
Помогаю со студенческими работами здесь

Перезапуск службы
В общем у меня есть свои собственные службы, например: Service1, Service2, Service3 ... ServiceN. Данные службы связаны друг с другом и...

Перезапуск службы
У меня служба, которая запускается и которая не должна останавливаться. Глобальный BroadcastReceiver получает сообщения и запускает...

Перезапуск службы
Добрый день. Хочу осуществить перезапуск службы через bat-файл. Написал пока так sc stop %1 &amp; sc start %1 %2 В...

Перезапуск службы
Добрый день, на сервере имеется служба CsmServic, которую надо перезапускать при появлении в логах текста &quot;Access violation at...

Перезапуск службы
в определённый момент для продолжения работы программы требуется перезапуск службы я это делаю в командной строке net stop...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

Новые блоги и статьи
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru