1

Я запускаю следующую команду

rabbitmq-server.bat" -detached

Эта команда запускает сервер в фоновом режиме. Когда я запускаю его из пакетных файлов - поток останавливается, и более поздние команды в пакетном режиме останавливаются.

  1. Зачем?
  2. Каков наилучший способ запуска таких команд?
  3. Запуск их с помощью cmd /c делает работу, но я не для всех этих команд

2 ответа2

1

Это ненормальное поведение, которое CMD Microsoft сохраняет для обратной совместимости вплоть до самых ранних версий Microsoft COMMAND. Если один командный сценарий выполняет другой командный сценарий, первый командный сценарий отменяется.

Способ обойти это с помощью встроенной команды call . Просто добавьте префикс командного сценария к call . Это приводит к тому поведению, которого вы, и я подозреваю, что большинство людей ожидают: скрипт вызывающей команды возобновляет выполнение после завершения скрипта вызываемой команды.

Вы также можете использовать cmd /c , но учтите, что это не одно и то же. call просто вложенные командные сценарии в одном и том же интерпретаторе команд. cmd /c запускает дополнительный новый подпроцесс интерпретатора команд. Изменения, внесенные в переменные, рабочий каталог, дескрипторы открытых файлов и тому подобное в подпроцессе, не влияют на его родительский элемент. И наоборот, call переносим, если нужно использовать заменяющие интерпретаторы команд, тогда как cmd связывает один с определенным интерпретатором команд.

дальнейшее чтение

  • JP Software. ВЫЗОВ. Возьмите Command / TCC Help.
  • "ЗОВ". Справочник по командной строке Windows XP A – Z. TechNet. Корпорация Майкрософт.
0

Это, вероятно, случай использования «Start.exe»

Запуск позволит вам запустить процесс сервера в отдельном окне и оставить его запущенным.

Исходный пакетный сценарий затем продолжит выполнение команд в сценарии, не дожидаясь завершения процесса сервера.

Хотя эти команды не влияют на этот отдельно запущенный процесс, однако, скорее всего, вы можете использовать некоторые команды, предназначенные для взаимодействия с запущенным Rabit MQ Server, в следующей части пакетного сценария, и они будут работать правильно.

Пока вы ставите паузу достаточной длительности с момента выполнения команды START до момента запуска клиентских команд, чтобы дать кроличьему серверу достаточно времени для полной реализации. (Это можно сделать с помощью паузы, которую вы нажимаете вручную, чтобы продолжить, или ping, чтобы включить таймер.)

Использование "CALL" или «CMD /C» без "Start" заставит пакетный сценарий подождать, пока вы не завершите выполнение серверной команды RabitMQ, прежде чем продолжить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .