Os arquivos de saída estarão vazios se não houver nada para se conectar na outra extremidade.
Verifique com netstat -ln | grep portnumber
no servidor. Se a outra extremidade
é outra instância do netcat, você precisa esperar que ele execute depois
o cliente sai e aguarda o início do novo processo.
$ cat connect-and-wait.sh
#!/bin/sh
dir=/home/jaroslav/tmp/so/nc-for-5-sec
while true; do
now='date +%Y-%m-%d.%H:%M:%S'
fil=gps1-freq-ref-capture-$now
out=$dir/$fil
nc eee.lan 5555 > $out &
pid=$!
sleep 5 && kill $pid && echo wrote $out
#sleep 1; <-- try this
done
Essa abordagem é falha porque você está prestes a perder dados enquanto se reconecta.
Se a outra extremidade for realmente outra instância de nc
, basta reiniciar o servidor
em um loop de shell será problemático (ele não se liga algumas vezes na minha experiência).
Portanto, tente manter uma conexão e faça algo com a saída:
$ cat connect-and-rotate-log.sh
#!/bin/sh
dir=/home/jaroslav/tmp/so/nc-for-5-sec
now=out
fil=gps1-freq-ref-capture-$now
out_=$dir/$fil
nc eee.lan 5555 > $out_ &
while [ -f $out_ ]; do
now='date +%Y-%m-%d.%H:%M:%S'
fil=gps1-freq-ref-capture-$now
out=$dir/$fil
sleep 5
echo wrote $out
cp $out_ $out
echo > $out_
done
Não é perfeito, mas é melhor. Além disso, você pode querer verificar a conexão com nmap
, por exemplo:
nmap eee.lan -p 5555 | grep -q '^5555.*open' && echo open