2015-07-14 5 views
1

Я пробовал несколько разных решений, но не имел такой работы. Я не привык к пакетному сценарию, поэтому для меня это было довольно тривиально.Комбинация Grep и tail для эквивалента Windows

Прямо сейчас у меня есть скрипт в Linux, который обрабатывает выполнение служб в синхронном порядке. Они зависят друг от друга и требуют, чтобы другой был полностью запущен, прежде чем они могут быть выполнены.

Я использую следующую строку, чтобы справиться с этим:

grep -qi 'Service has started.\|error' <(tail -f "/opt/app/log/daemon.log") 

Работает отлично. Однако это также необходимо работать в Windows. Я изучил использование GNU utils, но я действительно не изучал их лицензирование, что может создать проблему. Кроме того, я хотел бы сделать это изначально в Windows CL.

Cheers,
Крис

P.S.
Я ищу платформу НЕЗАВИСИМОЕ решение. Cygwin не ответ.

+0

В Windows службы, зависящие от других служб, могут указать это, и диспетчер управления службами SCM обрабатывает порядок запуска. См. Это сообщение SO для более подробной информации: http://stackoverflow.com/questions/5159257/create-dependency-between-windows-services-startup –

+0

См. Также здесь http://stackoverflow.com/questions/573623/is-powershell -ready-to-replace-my-cygwin-shell-on-windows/для некоторых примеров кода о grep, tail и многом другом. Также это звучит так, как будто у вас проблема XY с службами Windows. – Vesper

ответ

0

Если Вы желаете сделать это изначально в Windows, «путь для Windows», вы хотите, чтобы с помощью * -SERVICE командлетов (например Get-Service, Stop-Service, Start-Service и Restart-Service) в PowerShell.

Я признаю, что я не пользователь linux, но предполагаю, что вы проверяете статус службы после ее запуска?

В Windows в сценарии PowerShell, вы хотите сделать что-то вроде следующего (я специально собирание на службы теневого копирования томов, так как причины):

Start-Service -Name VSS 

While ((Get-Service -Name VSS).Status -ne 'Running') { 
    Start-Sleep -Seconds 2 
} 

# Start next service or continue with script here. 

Извинения, если это хорошо от того, что вы ищете. Я просто подхожу к этому вопросу как администратор Windows с точки зрения того, как я достиг бы цели.

+0

Есть лучший способ, см. Мой ответ. – Vesper

1

Вы должны использовать родную Windows «зависимость» услуг друг от друга. Используйте regedit.exe или sc.exe config, чтобы ввести зависимости. Таким образом, вы можете оставить запуск службы автоматическим, и они начнут запускаться только после того, как все службы, на которые это зависит, сообщили о своем состоянии как «запущен».

+0

Есть ли способ сообщить Windows, что служба полностью инициирована в JAVA. Я просмотрел это возможное решение, прежде чем публиковать его, но ничего не нашел, что говорит SCM, что служба полностью инициирована. Первый демон, который запускается, длится 60 секунд, чтобы завершить его запуск. Однако Windows считает приложение «готовым», когда оно действительно загружается, но за сценой многое происходит. Если это имеет смысл. – user0000001

+0

Вы потенциально используете что-то вроде JBOSS, которое indeeed превращается в «Running», только когда 'java.exe' загружает класс и не запускается до тех пор, пока не пройдет определенная инициализация.Это имеет смысл, если это так, вам нужно будет контролировать доступность в вашей следующей службе, если это возможно, или не использовать сценарий, который проверяет расширенную функциональность службы, которая работает с отчетами, пока не готова к фактическому обслуживанию. Я думаю, что это дефект в программном обеспечении, либо в самой Java, либо в загруженном модуле, который указывает на его готовность, прежде чем быть готовым. – Vesper

+0

Фактические тесты, конечно, зависят от того, что обычно должна выполнять ваша служба Java, скажем, открыть локальный порт HTTP и обработать запрос статуса. Если это не удается, просто запустите свои услуги при запуске (возможно, продление времени, разрешенного для Windows, чтобы сохранить сервис в запуске - есть несколько камней, чтобы ходить), спать и повторять попытку, до предопределенного таймаута. – Vesper