1秒あたり50〜1000件のメッセージを受信するポートが開いているサーバーがあります。メッセージとは、1行のテキストが送信されることを意味します。
基本的に、これらのメッセージを1時間(またはx分)ごとに処理されるファイルに記録する必要があります。
バックグラウンドで実行されるbashスクリプト(以下を参照)を作成しました。これは、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行を別のファイルにカットして、出力ファイルを管理可能なサイズのままにしますか?
よろしくお願いします