Я продал десятки серверов HP ProLiant ML370 G3 между 2003 и 2005. Вид отказа этих аппаратных средств был довольно интересен, поскольку датчики вентиляции на системной плате в конечном счете перестанут работать после 5 лет. Система не обнаружила бы присутствие вентилятора или состояние вращения/скорости в POST, таким образом, можно было бы быть нужен магазин-vac (вакуум), чтобы вынудить системных поклонников вращаться на достаточно высоком уровне во время начальной загрузки для хранения сервера на мимо POST. После этого охлаждение было достигнуто с внешним вентилятором... Доступность новых плат от HP была плоха и был дефицит среди торговых посредников частей, также.
Установка должна была содержать в течение 5 дней, в то время как я пытался принять меры для полета к сайту для клиентов на расстоянии в 2 000 миль с новыми аппаратными средствами в течение декабрьского праздничного сезона. Мы сделали его, хотя!
Вы можете использовать параметр -q
, но он также приведет к закрытию сервера netcat
.
$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001
В моем случае копия netcat, которую я использовал на моем Mac, установленном через Homebrew (v 0.7.1), не имела опции -q, но я мог использовать - c, чтобы закрыть STDIN EOF и поместить всю команду в цикл:
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
Оба других ответа -c
и -q
верны в правильном контексте, но это может помочь резюмировать, почему существует несколько ответов и дают более общее решение.
Эти разные опции делают одно и то же, но представляют собой разные реализации netcat:
-c
GNU-реализация netcat -q
OpenBSD-реализация netcat. -w
(другое?) Реализация netcat в OpenBSD. В некоторых версиях требуется int для указания количества секунд ожидания перед выходом для параметров -q
и -w
. Это int должно быть > 0
или > = 0
, в зависимости от версии.
Если вы что-то реализуете на нескольких машинах и не уверены, что они используют одну и ту же реализацию netcat, вы можете подумать о том, чтобы заключить вызов netcat в программу timeout
, чтобы убить netcat через несколько секунд.
тайм-аут 5 echo '{"hostUp": true}' | netcat localhost 8001
Этот подход немного неуклюж, потому что он устанавливает верхний предел выполнения netcat независимо от того, успешно ли он отправляет данные, но если вы отправляете небольшой объем данных и имеете несколько секунд чтобы сэкономить, это должно работать с любой реализацией netcat.
На сервере Ubuntu 18.04 мне пришлось использовать следующее: (найдено на страницах руководства)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
Очевидно, что -N
похож на в -q
или -c
в других дистрибутивах