2016-09-06 3 views
2

Я пытаюсь управлять Splunk с шеф-поваром и наткнулся на проблемы при использовании Chef для программного запуска/остановки/перезапуска службы Splunkforwarder:Splunk: «Чистая остановка Splunk» работает только * иногда *

The request did not respond to the start or control request in a timely fashion. - ControlService: The service did not respond to the start or control request in a timely fashion.

Как только Шеф-повар побежит, я могу начать службу с net start splunkforwarder.

я решил попробовать идти через рестарт (стоп/старт) процесс вручную в Powershell, и теперь, когда я пытаюсь остановить службу с net stop splunkfowarder я получаю сообщение об ошибке:

The service is not responding to the control function.

Somtimes остановке сервис работает, но редко. На данный момент я понятия не имею, что происходит, потому что я не привык работать в Windows (или с Splunk), и не уверен, связаны ли ошибки от шеф-повара и ошибки net stop splunkforwarder.

Я также обнаружил, что если я взаимодействую с splunk непосредственно через исполняемый файл в C:\Program Files\SplunkUniversalForwarder\bin\splunk.exe, все работает нормально. Я могу cd в этот каталог и запустить ./splunk restart без проблем.

Кто-нибудь знает, что происходит или у вас есть советы по следующим шагам по устранению неполадок?

+0

Если вы получаете ту же ошибку вручную, это вряд ли будет связано с шеф-поваром. Перейти к удалению тега. – coderanger

+0

'net stop splunkforwarder' не проходит через PowerShell, это будут команды Get-Service и' Restart-Service'. (Не то, чтобы я ожидал, что они будут вести себя по-другому, если Splunk не отвечает на запросы управления сервисом, но есть параметр '-Force'). – TessellatingHeckler

+1

Это действительно не вопрос программирования, а вопрос о том, почему Splunk не отвечает на команду остановки обслуживания (сообщать об этом Splunk - они должны иметь возможность определить, какой поток блокируется из дампа процесса, или серии технологических свалок). У меня есть другая служба с аналогичной проблемой, и я использую скрипт powershell для остановки службы ('stop-service'), а затем немного спящий, а затем проверяю, работает ли этот процесс. Если процесс все еще запущен, я использую 'stop-process' для его уничтожения, а затем' start-service' для его перезапуска. –

ответ

3

Это относится к ServerFault.

Однако.

Остановка сервис с net.exe фактически делает две вещи:

  1. посылает команду остановки на службу.
  2. Подождите некоторое время (30 секунд или 60 секунд, IIRC), чтобы узнать, остановлена ​​ли служба. Если это так, сообщите об успехе. Иначе, ошибка.

Мое предположение, что net.exe stop splunk поражает любой тайм-аут, который иногда используется net.exe.

Что вы можете сделать вместо этого:

sc.exe stop splunk 

Команда sc.exe будет делать только шаг 1. Он посылает команду остановки и немедленно возвращает. Командлет PowerShell Stop-Service сделает то же самое, IIRC. Обратите внимание, что net.exe и sc.exe являются не командами или командлетами PowerShell. Это стандартные программы.

Вы также можете сделать это ждать, скажем, 5 секунд:

$svc = Get-Service splunk; 
$svc.Stop(); 
$svc.WaitForStatus('Stopped','00:00:05'); 

И тогда вы можете посмотреть на $svc.Status, чтобы увидеть, что он делает.

Или вы можете сказать ему, чтобы ждать до бесконечности:

$svc = Get-Service splunk; 
$svc.Stop(); 
$svc.WaitForStatus('Stopped'); 

Get-Service возвращает объект типа System.ServiceProcess.ServiceController.Вы можете посмотреть $svc | Get-Member или $svc | Format-List, чтобы получить дополнительную информацию об объекте и о том, что вы можете с ним сделать.

Если вы хотите, чтобы ваш скрипт мог убить процесс, вам, вероятно, понадобится получить PID. Это несколько сложнее, потому что вышеупомянутый класс не раскрывает PID по какой-то глупой причине. Типичный метод WMI:

$wmisvc_pid = (Get-WmiObject -Class Win32_Service -Filter "Name = 'splunk'").ProcessId; 
Stop-Process $wmisvc_pid -Force; 

WMI также подвергает его собственные Start() и Stop() методы, и особенно полезно, потому что Start-Service и Stop-Service не работают удаленно, но WMI делает.

Смежные вопросы