Я использую следующие /etc/init/jsonlog.conf
выскочка:
description "jsonlog"
start on runlevel [23]
stop on runlevel [06]
respawn
script
cd /tmp
echo "about to listen"
/bin/nc -l 3333
echo "finished listening"
end script
post-stop script
sleep 1
end script
Проблема в том, что nc
немедленно завершается каждый раз, когда клиент подключается.
Требуемое поведение состоит в том, что все полученные данные (это utf8 json) должны попадать в /var/log/upstart/jsonlog.log
. На этом сервере работает Ubuntu 12.04LTS.
В nc
команда работает правильно при запуске из оболочки bash.
Я делаю предположение что это как-то связано с stdin
. Я пробовал использовать -q -1
вариант, но это не помогло.
P.S. Меня устраивает тот факт, что это будет слушать только одного клиента за раз.
Я вижу две проблемы с твоим nc
команда. Вы вызываете nc
способом, предназначенным для двусторонней связи, и ожидайте, что он будет выполнять одностороннюю связь.
В -d
флаг может остановить nc
от чтения из stdin
который заставит его выполнять одностороннюю коммуникацию, которую, похоже, вы пытаетесь сделать.
Другая проблема в том, что nc -l
по умолчанию обслуживает только одно соединение, а затем завершает работу. Вы можете использовать -k
флаг, чтобы изменить это поведение.
Таким образом, вся команда становится:
nc -dkl 3333
Однако похоже, что вы используете инструмент, не предназначенный для этой работы. Вместо того, чтобы использовать nc
Я бы рекомендовал вам использовать протокол системного журнала и регистратор, предназначенный для работы с этим протоколом.
nc -dl
это то, что вам нужно для вкуса BSD nc
.
В nc
которая поставляется с RHEL7, не является версией BSD. Вместо этого ncat
из программного обеспечения nmap. В отличие от версии BSD, здесь нет -d
флаг. Вместо того -dl
, ты можешь использовать -l --recv-only < /dev/zero
. Версия NCAT, которая поставляется с EL7, имеет (закрытый / фиксированный) ошибка который закроет программу до завершения чтения из сокета, если EOF возвращается из чтения stdin. Вот почему вам нужно передавать данные на стандартный ввод через / dev / zero или что-то еще. Новые версии поддержки NCAT --no-shutdown
который можно использовать вместо < /dev/zero
.