Посмотрите на JVM Profiler , выпущенный UBER.
JVM Profiler - это инструмент, разработанный UBER для анализа приложений JVM в распределенной среде. Он может подключать Java-агент к исполнителям приложения Spark / Hadoop распределенным способом и собирать различные показатели во время выполнения. Это позволяет отслеживать произвольные java-методы / аргументы без изменения исходного кода (аналогично Dtrace).
Вот сообщение в блоге .
Немного нестандартно размышляя, я собираюсь предположить, что powershell может быть ответом на современные машины XP / 2003 и, конечно, на Vista / 2008 и новее (вместо этого из .bat / .cmd). Любой, у кого есть опыт работы с Perl, довольно быстро почувствует себя как дома.
$serviceName = "ServiceName";
$serviceStatus = (get-service "$serviceName").Status;
if ($serviceStatus -eq "Running") {
echo "Service is Running";
}
else {
#Could be Stopped, Stopping, Paused, or even Starting...
echo "Service is $serviceStatus";
}
Другой способ, если у вас есть значительные вложения в пакетную обработку, - это запустить сценарий PS как однострочный, возвращая код выхода.
@ECHO off
SET PS=powershell -nologo -command
%PS% "& {if((get-service SvcName).Status -eq 'Running'){exit 1}}"
ECHO.%ERRORLEVEL%
Запуск поскольку однострочник также обходит политику подписи кода PS по умолчанию за счет беспорядка. Чтобы поместить команды PS в файл .ps1 и запустить его как powershell myCode.ps1
, вы можете обнаружить, что подписание сценариев PowerShell необходимо для их автоматического запуска (в зависимости от вашей среды). См. http://www.hanselman.com/blog/SigningPowerShellScripts.aspx для получения дополнительной информации
если Вы не возражаете для объединения сетевой команды с grep, можно использовать следующий сценарий.
@echo off
net start | grep -x "Service"
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo trouble
goto end
:started
echo started
goto end
:stopped
echo stopped
goto end
:end
Попробуйте
sc query state= all
для списка сервисов и работают ли они или нет.
Вы могли использовать wmic с / локаль опция
call wmic /locale:ms_409 service where (name="wsearch") get state /value | findstr State=Running
if %ErrorLevel% EQU 0 (
echo Running
) else (
echo Not running
)
Я нашел это:
sc query "ServiceName" | findstr RUNNING
, кажется, делает примерно правильную вещь. Но, я волнуюсь, что это не сделало вывод достаточно для работы над неанглийскими операционными системами.