「systemd-tmpfiles --clean」が機能しないのはなぜですか?

「systemd-tmpfiles --clean」が機能しないのはなぜですか?

一時ファイルをクリーンアップするには、次の設定を使用しました(CentOS 7の場合はデフォルト)。これは/tmp、ファイルが10日より古い場合は削除する必要があることを示します。

[root]# tail -n +10 /usr/lib/tmpfiles.d/tmp.conf | head -n 3
# Clear tmp directories separately, to make them easier to override
d /tmp 1777 root root 10d
d /var/tmp 1777 root root 30d

ところで実行してからもsystemd-tmpfiles --clean内容を見ると/tmp10日を超えるファイルが入っています。

[root]# ls -dl /tmp/backup-inspection
drwxr-xr-x 8 root root 68 Aug 29  2014 /tmp/backup-inspection

このディレクトリの内容は/tmpかなり大きいです。

[root]# du -h /tmp | tail -n 1
3.5G    /tmp

backup-inspectionこのディレクトリが削除されない理由を説明できる人はいますか?すでにほぼ1歳になりましたか?

ベストアンサー1

最近、同じ問題に直面してこの問題を発見し、経験を共有しています。

実際には、systemd-tmpfiles期待どおりに再帰ディレクトリツリー処理が完全にサポートされています(他の答えはソースコードを確認するのに十分混乱しています)。私の場合、atimeファイルが削除されない理由は。systemd-tmpfilesctimemtimeatime

systemd-tmpfiles実際には、ファイルをスキップするための内部ルールが多いため、他の理由がある可能性があります。一部のファイルが削除されなかった理由を確認するには、systemd-tmpfiles次のコマンドを実行します。

env SYSTEMD_LOG_LEVEL=debug systemd-tmpfiles --clean

コンソールに多くの出力をダンプできます。stdoutたとえば、ファイルにリダイレクトしようとすると、出力は消えてsystemdログに送信されます(たとえば、経由で取得できますjournalctl)。私の場合は、出力も途中で切り捨てて(または使い方を知らなかったためjournalctl)、ターミナルエミュレータの履歴バッファを一時的に増やすことが解決策でした。

おすすめ記事