Em vez de zipar o arquivo enquanto ele está sendo gravado, mova-o para fora do caminho e, em seguida, feche o arquivo estático ...
mv / home / usuário / mylog /home/user/mylog.0; gzip /home/user/mylog.0
Você não deve precisar do toque, enquanto o script é executado, se o arquivo de log desaparecer, ele deverá criá-lo sozinho.
Aqui está um teste:
Execute este script ...
for (( ; ; )); do echo "123" >> test.log; sleep 1; done
mova o arquivo para um novo nome ....
mv test.log test.log.0
O novo test.log é criado automaticamente, supondo que o script ainda esteja em execução.
Tente isso no loop While. Funcionou quando eu testei.
while true;do
exec 3>&1 1>>time.logger 2>&1
date;
#other stuff...
done