Войти

Показать полную графическую версию : Перезапустить службу bat файлом


ruslanstep1
01-03-2012, 23:09
Здравствуйте Все!!!
У меня есть проблема, требуется перезапустить службу если она начинает использовать память больше 300 м.
Допустим программа называется test.exe в tasklist и когда ее используемая память больше 300 м то перезапуск службы с названием Test_Test.exe.
И нужно чтоб велись логи записи типа:
02.02.2012 23:00:05 the program was restarted test.exe

Всем спасибо.

alex_03
02-03-2012, 14:52
Расскажу по теме то что знаю

Во-первых как узнать из cmd сколько потребляет служба памяти - я не знаю.
Но знаю что любая служба или программа - это процесс, который потребляет память и время процессора.

Во-вторых такая задача скорее всего решается с помощью С++ , есть функции которые могут сканировать процессы и по какому-то конкретному процессу получить информацию о том сколько памяти он потребляет. Потом можно вызвать из этой же программы cmd с уже предопределенным параметром net stop <параметры > <служба> net start <параметры> <служба> и все.

обращайтесь если реально горит помогу с кодом

ferget
02-03-2012, 15:42
тут есть на vbs
http://forum.oszone.net/thread-98464.html

ruslanstep1
02-03-2012, 15:52
в cmd я знаю как найти.
tasklist /FI "IMAGENAME eq test.exe"
там будет вывод в англиской версии как раз уменя такая
Image Name PID Session Name Session# Mem Usage
============== =========== ======== ========== =========
test.exe 1432 Console 0 593 508 K

так вот можно перенаправить этот вывод в текставой документ и потом и выдернуть значение 593 508 K и сравнить типа
если [ 593 508 > 300 000 ] тогда ребут службы. вот как то так я просто не знаю как его реализовать в bat-нике. Поэтому и обратился сюда к вам

alex_03
02-03-2012, 16:23
может тогда просто через определенные интервалы времени перезагружать сервис.
скажем подсчитаете что через каждые 2 часа память используется около 500 или выше , тогда надо каждые два часа вызывать батничек с рестартом сервиса

roma35
02-03-2012, 22:23
for /f "skip=3 delims=" %i in ('tasklist /FI "IMAGENAME eq test.exe"') do echo %i
Это тебе для затравки.

alexinqmetal
26-06-2013, 09:38
Подниму темку. Может кто знает как перезапустить службу из bat. В консоли служб путь к исполняемому файлу выглядит так "C:\Program Files\1C\Licence 1.1\Bin\LicenceServer.exe /Service". В диспетчере задач процесс висит LicenceServer.exe. Попытки использовать следующие команды не проходят:

net stop "C:\Program Files\1C\Licence 1.1\Bin\LicenceServer.exe"
Синтаксическая ошибка в имени файла, имени папки или метке тома.

net stop LicenceServer.exe
Указанная служба не установлена

Вариант с жестким убийством процесса оставляю на крайний случай. Может есть еще какие варианты чтобы автоматически перезапустить службу?

Iska
26-06-2013, 10:08
Сначала получите имя службы, наподобие:
wmic.exe Service where "PathName like 'C:\\Program Files\\1C\\Licence 1.1\\Bin\\LicenceServer.exe%'" get Name /value
Можете и тут:
В консоли служб »
посмотреть имя в её свойствах.

Затем, используя полученное имя службы, пробуйте net stop/net start.

А что, подвисает?

alexinqmetal
26-06-2013, 13:03
Спасибо, нашел имя службы оказалось LicenceService.

Подвисает не сама служба, а из-за 1С зависают лицензии, что очень мешает, приходится хотя бы раз в день перезапускать службу чтобы сбросить занятые лицензии. Поэтому пока ищу источник проблемы 1С и решил написать перезапускалку службы.




© OSzone.net 2001-2012