開いたファイルを無視するようにlogrotateに指示する方法はありますか?

開いたファイルを無視するようにlogrotateに指示する方法はありますか?

検索しましたが、何も見つかりませんでした。logrotate現在開いているファイルをタッチしたくありません。私は何かをしようとしていますが、lsofスクリプトで作業を中断させる方法が見つかりませんでした。どんなアイデアがありますか?

ベストアンサー1

nosharedscriptsこの設定(デフォルト)があり、prerotateスクリプトがエラーで終了すると、影響を受けるログファイル*に対して追加のアクションは実行されません。

したがって、理論的には次のような結果が得られます(警告、テストされていません)。

/var/log/application.log {
    nosharedscripts
    prerotate
        logfile=$1
        lsof $logfile >/dev/null
        exit $?
    endscript
    ...
}

したがって、開いているプロセスがlsofないと、スクリプトは終了し、ログに何もしません。$logfileprerotate1logrotate


*からlogrotate(8)linux.die.netのマニュアルページ:

nosharedscripts
Run prerotate and postrotate scripts for every log file which is rotated
(this is the default, and overrides the sharedscripts option). The absolute
path to the log file is passed as first argument to the script. If the
scripts exit with error, the remaining actions will not be executed for the
affected log only.
...
prerotate/endscript
The lines between prerotate and endscript (both of which must appear on
lines by themselves) are executed (using /bin/sh) before the log file is
rotated and only if the log will actually be rotated. These directives may
only appear inside a log file definition. Normally, the absolute path to
the log file is passed as first argument to the script. If sharedscripts is
specified, whole pattern is passed to the script. See also postrotate. See
sharedscripts and nosharedscripts for error handling.

これ可能バージョンによって異なりますが、logrotateどのバージョンでこれを実行または実行しないかについてのドキュメントが見つかりません。

おすすめ記事