У меня есть инструмент, который передает данные из порта tcp, и я хотел бы использовать стандартные инструменты в скрипте, чтобы определить, доступен ли поток.Скрипт для проверки трафика с потокового сервера?
Вручную используется ncat
, который быстро выходит, если поток данных недоступен.
Вот мой первоначальный Баш скрипт:
#!/bin/bash
ncat somehost 1234 >/dev/null &
pid=$!
sleep 1
if [ -d /proc/$pid/ ]; then
kill -KILL $pid
echo "It's alive, ALIVE\!"
# Launch clients
else
echo "He's dead, Jim."
# Perform resurrection
fi
Это работает, но мне интересно, если есть более простой и лучший способ для достижения этой цели, не полагаться на контроль работы или PROCFS или даже Ncat. Я также хотел бы знать, сколько данных было отправлено до истечения тайм-аута.
И, да, в bash ncat host port
можно заменить на cat </dev/tcp/host/port
, но я также хотел бы избежать bash-isms (так что он может работать в busybox).
Другим подходом было бы использовать wc
для подсчета строк/символов, выдаваемых ncat
, поскольку он выводит только одну строку и выходит, если соединение не может быть выполнено. Но я не могу ждать навсегда для завершения, если поток завершен, поэтому мне нужно будет использовать что-то вроде timeout
, которое имеет свои собственные сложности при попытке получить доступ к выходу команды.
Есть ли «простой» подход, который работает с минимальными зависимостями?
Или мне следует написать простой инструмент? Он будет возвращать количество прочитанных байтов, если было установлено соединение с хостом/портом, отрицательное errno в противном случае, и будет поддерживать время ожидания и спецификацию протокола (tcp/udp). Возвращаемое значение 0 означает, что соединение было выполнено, но данные не дошли до истечения времени ожидания (что хорошо знать).
Или, может быть, заплатить ncat
, чтобы сделать это?
Вместо 'timeout' можно перенаправить вывод' ncat' в 'head -n 3', что вызовет ошибку канала после 3 строк (с указанием активного потока). К сожалению, 'ncat' плохо реагирует на' SIGPIPE', и PITA обрабатывает ошибки сигнала в 'bash'. – BobC