У меня есть сервер с открытым портом, который получает от 50 до 1000 сообщений в секунду. Под сообщением я подразумеваю, что отправляется одна строка текста.
По существу, мы хотим записать эти сообщения в файл, который будет обрабатываться каждый час (или x минут).
Я создал bash script (см. ниже), который работает в фоновом режиме, и он работает, за исключением случаев, когда я убиваю процесс socat (так что я могу взять файл для обработки и начать новый файл). получить часть сообщения, плюс я уверен, что мы теряем сообщения в течение секунды секунды, что socat не работает.
DELAY="3600"
while true
do
NEXT_STOP=`date +%s --date "$DELAY second"`
(
while [ "$(date +%s)" -lt "$NEXT_STOP" ]
do
killall socat
socat -u TCP-LISTEN:6116,reuseaddr,keepalive,rcvbuf=131071,reuseaddr OPEN:/var/ais/out_v4.txt,creat,append
done
) & sleep $DELAY ; killall socat
mv /var/ais/out_v4.txt "/var/ais/_socat_received/"$(date +"%Y-%m-%d-%T")"__out_v4.txt"
done
Есть ли способ:
- Получить socat, чтобы повернуть свой выходной файл, не убивая процесс
- Или мы можем очистить содержимое файла, пока SOCAT пишет ему. например вырезать первые 10000 строк в другой файл, поэтому выходной файл остается управляемым размером?
Большое спасибо заранее