|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - остановка службы по PID |
|
|
CMD/BAT - остановка службы по PID
|
Новый участник Сообщения: 7 |
Добрый день!
помогите пожалуйста написать батник, который по пиду будет убивать повисшую службу в ручную делаю так. запрашиваю пид службы командой sc queryex и далее по полученному пид убиваю принудительно службу taskkill /f /pid как это сделать в автомате? |
|
Отправлено: 11:26, 28-06-2012 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать quazar-ed, остановка службы — это одно. Снятие процесса службы — совсем другое. Определитесь.
Как Вы определяете, что служба: Цитата quazar-ed:
|
|
Отправлено: 12:46, 28-06-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата Iska:
после этого приходится делать то что писал в первом сообщении... т.е. убивать процесс службы |
|
Отправлено: 15:04, 28-06-2012 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 1. Это какая-то определённая служба? У неё есть имя?
2. Зачем её надо Вам останавливать? |
Отправлено: 16:28, 28-06-2012 | #4 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать @Echo Off Set ServiceName=JavaQuickStarterService :: Получаем состояние службы, проверяем запущена ли она SC queryex %ServiceName%|Find "STATE"|Find "RUNNING">Nul&&( rem Пробуем остановить Net stop %ServiceName%||( rem Если остановить через net stop не вышло, запрашиваем PID For /F "tokens=3" %%A In ('SC queryex %ServiceName%^|Find "PID"') Do ( rem Убиваем процесс вместе с дочерними, используя полученный PID TaskKill /F /T /PID %%A ) ) ) rem Если служба не была запущена, или уже убита к тому времени - запускаем её Net start %ServiceName% Pause |
|
Последний раз редактировалось Anonymоus, 28-06-2012 в 20:47. Отправлено: 20:38, 28-06-2012 | #5 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Iska,
1. да служба определенная. и имя естественно есть 2. останавливать нужно для: 1) эта служба базы оракл (который когда-то и кем-то был установлен некорректно с чем и собственно связанны эти зависания службы), 2) эта служба отвечает за работу удаленного клиента, который в свою очередь при повисании этой службы не может получить доступ к базе п.с. надеюсь понятно изложил Anonymоus, благодарю за код, но теперь возникает вопрос. когда служба висит то статус у нее все равно запущена, код определив статус выдает, что она запущена и прекращает работу, можно ли его подправить чтобы код пробовал службу перезапустить, а если это не выходит то убивал её как дальше и описано в нём? |
Отправлено: 09:00, 29-06-2012 | #6 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Цитата quazar-ed:
|
|
Последний раз редактировалось Anonymоus, 29-06-2012 в 10:37. Отправлено: 10:29, 29-06-2012 | #7 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Anonymоus,
запускаю Ваш код подставив имя своей службы в место Цитата Anonymоus:
так и должно быть? |
|
Отправлено: 11:01, 29-06-2012 | #8 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать quazar-ed, попробуйте вот так, я не учел того, что без задержки после убийства процесса информация о службах не успевает обновиться, добавил эту самую задержку.
@Echo Off Set ServiceName=JavaQuickStarterService :: Получаем состояние службы, проверяем запущена ли она SC queryex %ServiceName%|Find "STATE"|Find "RUNNING">Nul&&( rem Пробуем остановить Net stop %ServiceName%>nul||( rem Если остановить через net stop не вышло, запрашиваем PID For /F "tokens=3" %%A In ('SC queryex %ServiceName%^|Find "PID"') Do ( rem Убиваем процесс вместе с дочерними, используя полученный PID TaskKill /F /T /PID %%A>nul rem Задержка, чтобы обновился статус службы после убийства процесса Ping -n 4 127.0.0.1>nul ) rem На всякий случай Net stop %ServiceName% 2>nul ) ) rem Если служба не была запущена, или уже убита к тому времени - запускаем её Net start %ServiceName% Pause |
Отправлено: 11:23, 29-06-2012 | #9 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Anonymоus, я благодарен за Вашу помощь, но что-то похоже опять не так )).. выдает тоже самое сообщение снова. может задержка мала?
|
Отправлено: 11:40, 29-06-2012 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Остановка и запуск службы | TERMINAL | AutoIt | 44 | 05-01-2018 15:36 | |
[решено] Остановка службы. | Just4Fun | Microsoft Windows NT/2000/2003 | 19 | 17-05-2013 14:27 | |
Разное - Частая остановка службы | VbInt | Microsoft Windows Vista | 6 | 18-02-2009 16:21 | |
Службы - Внезапная остановка Службы диспетчера печати | aminiy | Microsoft Windows Vista | 10 | 18-07-2008 17:55 | |
непредвиденная остановка службы Isass.exe | Trei | ISA Server / Microsoft Forefront TMG | 3 | 24-08-2005 08:27 |
|