スクリプトを実行し続けるには、新しいファイルに書き込みます。

スクリプトを実行し続けるには、新しいファイルに書き込みます。

継続的なログイン(たとえば、1秒あたり2〜3ページ)を提供するスクリプトがあります。下に裏地を付け加えて使用しました。

sh myscript.sh > /home/user/mylog

ファイルを圧縮して100MBに達すると、新しいファイルを生成する別のスクリプトを実行しています。

gzip /home/user/mylog;touch /home/user/mylog

gzipしかし、コマンド間でいくつかのログが失われているようです。touchログの損失を防ぐためのベストプラクティスを提案できる人はいますか?

ベストアンサー1

ファイルを作成しながら圧縮するのではなく、邪魔にならない場所に移動して静的ファイルを圧縮します。

mv /home/user/mylog /home/user/mylog.0; gzip /home/user/mylog.0

スクリプトの実行時にログファイルが消えた場合は、独自に生成する必要があるため、手を触れる必要はありません。

テストは次のとおりです。このスクリプトを実行してください... for (( ; ; )); do echo "123" >> test.log; sleep 1; done

次に、ファイルを新しい名前に移動します。 mv test.log test.log.0

スクリプトがまだ実行中であると仮定すると、新しいtest.logが自動的に生成されます。

Whileループでこれを試してみてください。私がテストしたときに効果がありました。

while true;do
  exec 3>&1 1>>time.logger 2>&1
  date;
  #other stuff...
done

おすすめ記事