Команди виконуються в пакетному файлі тільки під час написання cmd / c раніше


1

Я виконую наступну команду

rabbitmq-server.bat" -detached

Ця команда запускає сервер у фоновому режимі. Коли я запускаю його з пакетних файлів - потік зупиняється, а пізніше команди в пакетному режимі зупиняються.

  1. Чому?
  2. Який найкращий спосіб виконувати такі команди?
  3. Запуск їх з cmd / c виконує завдання, але я не для всіх цих команд

Відповіді:


1

Це погана поведінка, що CMD корпорації Майкрософт зберігає для зворотної сумісності весь шлях назад до найдавніших версій команди COMMAND. Якщо один командний скрипт виконує інший командний скрипт, перший командний скрипт скасовується.

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

Також можна використовувати cmd /c, але зверніть увагу, що це не те ж саме. call просто гнізда командних скриптів в межах одного інтерпретатора команд. cmd /c запускає додатковий новий підпроцес інтерпретатора команд. Зміни, внесені до змінних, робочий каталог, відкриті файлові ручки, і подібні до підпроцесу не вплинуть на його батьківську. І навпаки, call є портативним, якщо потрібно використовувати заміну командних перекладачів, тоді як cmd прив'язується до конкретного інтерпретатора команд.

Подальше читання

  • JP Software. CALL . Візьміть довідку Command / TCC.
  • "CALL" . Довідка командного рядка Windows XP A – Z. TechNet. Корпорація Microsoft.

0

Ймовірно, це стосується використання "Start.exe"

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

Потім оригінальний пакетний сценарій продовжуватиме виконання команд у скрипті, не чекаючи завершення процесу сервера.

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

До тих пір, поки ви ставите паузу достатньої довжини від часу виконання команди START до часу, коли ініціюються команди клієнта, щоб дати кролику сервер достатньо часу, щоб повністю інстанції. (Це може бути зроблено з паузою, яку ви вручну натискаєте Enter, щоб продовжити або ping, щоб мати таймер.)

Використання "CALL" або "CMD / C" без "Start" призведе до того, що пакетний скрипт чекає, поки ви не завершите виконання команди сервера RabitMQ, перш ніж продовжити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.