Показать полную графическую версию : Перезапустить службу 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
Всем спасибо.
Расскажу по теме то что знаю
Во-первых как узнать из cmd сколько потребляет служба памяти - я не знаю.
Но знаю что любая служба или программа - это процесс, который потребляет память и время процессора.
Во-вторых такая задача скорее всего решается с помощью С++ , есть функции которые могут сканировать процессы и по какому-то конкретному процессу получить информацию о том сколько памяти он потребляет. Потом можно вызвать из этой же программы cmd с уже предопределенным параметром net stop <параметры > <служба> net start <параметры> <служба> и все.
обращайтесь если реально горит помогу с кодом
тут есть на 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-нике. Поэтому и обратился сюда к вам
может тогда просто через определенные интервалы времени перезагружать сервис.
скажем подсчитаете что через каждые 2 часа память используется около 500 или выше , тогда надо каждые два часа вызывать батничек с рестартом сервиса
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
Указанная служба не установлена
Вариант с жестким убийством процесса оставляю на крайний случай. Может есть еще какие варианты чтобы автоматически перезапустить службу?
Сначала получите имя службы, наподобие:
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.