Как запустить асинхронные команды в очереди И в фоновом режиме? - PullRequest
2 голосов
/ 18 июня 2019

Я хочу создать сценарий оболочки (.sh), используя MacOS и LinuxOS (соответственно).Вот что я сделал:

#!/bin/bash

redis-server &
mongod &
cd ~/some/path && npm start &
cd ~/some/path && ./ngrok http 3000 -region=eu &

echo "My Workspace has been started"

Я хочу, чтобы redis-сервер работал в фоновом режиме, и только к тому моменту, когда redis-сервер был полностью запущен, я хочу запустить службу mongod.И т. Д. И т. П.

В конце сценария я хочу увидеть, что Моя рабочая область запущена Журнал в Терминале.

Что происходит сейчас, так эточто он запускает их все вместе, я вижу смешанные журналы в Терминале Redis, а затем Монго, а затем некоторые из npm и т. д.

Как я могу этого достичь?

1 Ответ

2 голосов
/ 18 июня 2019

Вы должны дождаться успешного выполнения предыдущей команды. Это может быть достигнуто как:

#!/bin/bash

redis-server && \
    mongod &&\
    cd ~/some/path && npm start &&\
    cd ~/some/path && ./ngrok http 3000 -region=eu &&\    
    echo "My Workspace has been started"

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

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

#!/bin/bash

redis-server &
sleep $SOMEMINUTES &&\
ps WHATEVEROPTIONSYOUPREFER | grep redis && \
mongod &

Вы видите образец здесь. Или Вы можете положиться на это для redis:

#!/bin/bash

redis-server &
sleep $SOMEREASONABLETIME && redis-cli ping && \
mongod &
cd ~/some/path && npm start &
cd ~/some/path && ./ngrok http 3000 -region=eu &

echo "My Workspace has been started"

Для mongodb Возможно, вам придется положиться на ps или netcat, чтобы проверить статус, насколько я знаю. Здесь Вы можете найти несколько примеров .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...