Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - остановка службы по PID

Ответить
Настройки темы
CMD/BAT - остановка службы по PID

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!

помогите пожалуйста написать батник, который по пиду будет убивать повисшую службу

в ручную делаю так. запрашиваю пид службы командой sc queryex и далее по полученному пид убиваю принудительно службу taskkill /f /pid

как это сделать в автомате?

Отправлено: 11:26, 28-06-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


quazar-ed, остановка службы — это одно. Снятие процесса службы — совсем другое. Определитесь.

Как Вы определяете, что служба:
Цитата quazar-ed:
повисшую службу »
?

Отправлено: 12:46, 28-06-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Как Вы определяете, что служба: »
захожу в консоль "Службы" пытаюсь остановить её вручную долго идет процесс остановки, не останавливается выдает ошибку о том что служба не ответила вовремя и всё, так и остается в состоянии не включена и не выключена..

после этого приходится делать то что писал в первом сообщении... т.е. убивать процесс службы

Отправлено: 15:04, 28-06-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


1. Это какая-то определённая служба? У неё есть имя?
2. Зачем её надо Вам останавливать?

Отправлено: 16:28, 28-06-2012 | #4


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska,
1. да служба определенная. и имя естественно есть
2. останавливать нужно для: 1) эта служба базы оракл (который когда-то и кем-то был установлен некорректно с чем и собственно связанны эти зависания службы), 2) эта служба отвечает за работу удаленного клиента, который в свою очередь при повисании этой службы не может получить доступ к базе
п.с.
надеюсь понятно изложил

Anonymоus,
благодарю за код, но теперь возникает вопрос. когда служба висит то статус у нее все равно запущена, код определив статус выдает, что она запущена и прекращает работу, можно ли его подправить чтобы код пробовал службу перезапустить, а если это не выходит то убивал её как дальше и описано в нём?

Отправлено: 09:00, 29-06-2012 | #6


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Цитата quazar-ed:
код определив статус выдает, что она запущена и прекращает работу »
Неверно, потому что если служба запущена (Status: Running) - как раз и происходят все последующие операции - попытка корректной остановки или убийства процесса, если предыдущее не вышло, а после - запуск снова, т.е. то, что вы и описали, перезапуск.

Последний раз редактировалось Anonymоus, 29-06-2012 в 10:37.


Отправлено: 10:29, 29-06-2012 | #7


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Anonymоus,
запускаю Ваш код подставив имя своей службы в место
Цитата Anonymоus:
JavaQuickStarterService »
на что мне выдается сообщение

Код: Выделить весь код
Затребованная служба уже запущена.

Для вызова дополнительной справки наберите NET HELPMSG 2182.

Для продолжения нажмите любую клавишу . . .
так и должно быть?

Отправлено: 11:01, 29-06-2012 | #8


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


Anonymоus, я благодарен за Вашу помощь, но что-то похоже опять не так )).. выдает тоже самое сообщение снова. может задержка мала?

Отправлено: 11:40, 29-06-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - остановка службы по PID

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Остановка и запуск службы 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




 
Переход