bash: while - сделать остановку через некоторое время - PullRequest
0 голосов
/ 30 октября 2018

Кажется, это глупый вопрос, но я не могу понять, почему мой bash-скрипт ведет себя странно.

У меня есть простой bash-скрипт, который контролирует сервер и проверяет, работает он или нет.

Скрипт работает нормально, но существует примерно через 30 секунд. Затем я снова запускаю скрипт, он немного зацикливается и снова выходит.

Сервер постоянно работает, он не останавливается, поэтому я не понимаю, почему мой цикл завершается через некоторое время.

#!/bin/bash
export ZOOKEEPER_HOST=localhost
export ZOOKEEPER_PORT=2181
export KAFKA_HOME=/home/.../server/kafka/kafka_2.11-2.0.0

# *********************************************************
# **    STOP: Kafka                                      **
# *********************************************************
stop-kafka() {
    echo "-> Stopping Kafka server..."
    #${KAFKA_HOME}/bin/kafka-server-stop.sh &
    while echo dump | nc ${ZOOKEEPER_HOST} ${ZOOKEEPER_PORT} | grep brokers
    do
        echo "Kafka server is still running..."
        sleep 1
    done
}

stop-kafka

exit 0

Это вывод первых строк моего скрипта на консоли:

xxx@hp:~/workspace/xxx/xxx$ ./test-run.sh 
-> Stopping Kafka server...
    /brokers/ids/0
Kafka server is still running...
    /brokers/ids/0
Kafka server is still running...
    /brokers/ids/0
Kafka server is still running...

И последние строки перед моим скриптом завершаются:

Kafka server is still running...
    /brokers/ids/0
Kafka server is still running...
    /brokers/ids/0
Kafka server is still running...
    /brokers/ids/0
Kafka server is still running...
    /brokers/ids/0
Kafka server is still running...
    /brokers/ids/0
Kafka server is still running...
xxx@hp:~/workspace/xxx/xxx$ 

-> ОБНОВЛЕНИЕ <- </strong>

Я изменил свой скрипт согласно предложению @ shellter.

stop-kafka() {
    echo "-> Stopping Kafka server..."
    #${KAFKA_HOME}/bin/kafka-server-stop.sh &
    #while echo dump | nc ${ZOOKEEPER_HOST} ${ZOOKEEPER_PORT} | grep brokers
    while true
    do
        echo "Kafka server is still running..."
        echo dump | nc ${ZOOKEEPER_HOST} ${ZOOKEEPER_PORT}
        sleep 1
    done
}

Я запустил его с помощью этой команды: ./test-run.sh > test-run.log

Файл журнала:

...
Kafka server is still running...
SessionTracker dump:
Session Sets (3):
0 expire at Thu Jan 01 02:22:48 CET 1970:
0 expire at Thu Jan 01 02:22:51 CET 1970:
1 expire at Thu Jan 01 02:22:54 CET 1970:
    0x10000491a850000
ephemeral nodes dump:
Sessions with Ephemerals (1):
0x10000491a850000:
    /controller
    /brokers/ids/0
Kafka server is still running...  <-- missing content after this line
Kafka server is still running...
SessionTracker dump:
Session Sets (3):
0 expire at Thu Jan 01 02:22:48 CET 1970:
0 expire at Thu Jan 01 02:22:51 CET 1970:
1 expire at Thu Jan 01 02:22:54 CET 1970:
    0x10000491a850000
ephemeral nodes dump:
Sessions with Ephemerals (1):
0x10000491a850000:
    /controller
    /brokers/ids/0
...

После некоторого цикла, как вы видите, содержимое "полезной нагрузки" отсутствует. Это ошибка в nc?

Не могли бы вы предложить мне другой уровень косвенности?

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