Nextcloudのファイル自動削除機能(Retention)の動作について

Nextcloudのファイル自動削除機能を使ってみましたので、分かったことなどをメモします。

ファイルの自動削除機能は、Retention アプリを有効にすることにより、管理画面から設定が可能です。

ownCloudでは、Enterprise Edition (有償版)で使える機能のようです。

Nextcloud側にはまだドキュメントが用意されていないようですが、ownCloudのEnterprise版のマニュアルを参照すると、少し機能説明が載っています。
ただし、Nextcloudでもまったく同じ仕様で実装されているかはわかりません。

ownCloud | Advanced File Tagging With the Workflow App (Enterprise only)

マニュアルをみる感じでは、TagBase と UserBase のモードがあるらしいですが、今回は TagBase の動作について確認します。

タグベースモードの仕様について

ある特定のシステムタグが付与されたファイルが存在する場合、タグに対して設定した経過時間を過ぎた時に、そのタグが付与されたファイルが削除される仕組みです。

ファイルへのシステムタグの付与は、オートタギング機能か、手動で設定をする必要があります。

下記は、Nextcloud 11.0.1 時点での確認できた挙動です。

  • ファイルの削除タイミングはおそらく日ごとに1回
  • ファイルの経過時間の判定は、mtime を見ている
  • ファイルの更新が行われると mtime も更新されるため期限とならずに削除されない
  • 削除されたファイルはゴミ箱(アプリ)へ保存されずに異次元へと消える
  • 削除されたファイルのログは残らない(cronの実行ジョブのみ)

また、バグというか仕様上仕方がないというか、Retention のルールを削除する前に、ルールを設定中のシステムタグを削除してしまうと、retention の jobは消えずに残ってしまうため、バックグラウンドジョブ実行の度に、そんなシステムタグは存在しないというエラーが出力され続けるようになります。

この場合は、直接データベースを操作して oc_jobs テーブル内のキューを削除する必要があります。

タイムスタンプの仕様について

もう1点残念な仕様がありまして、Nextcloudや、ownCloudはファイルのタイムスタンプに、mtime を参照しています。

atime … 最終アクセス日時 (access time)
mtime … 最終変更日時 (modify time)
ctime … 最終ステータス変更日時 (change time)

mtime は、ファイルを変更した時に更新されます。
正確には write(2) または truncate(2) した場合に変更されるようです。

たとえば、Windows端末などから、Nextcloudへファイルを追加した時は、mtime は更新されません。

Windowsで10ヶ月前に更新されたファイルをアップロードした場合は、Nextcloud上でも10ヶ月前のファイルです。
(これはバックエンドにファイルサーバを接続した時を考慮した仕様だと思います。)

このファイルに Retentionアプリで、1ヶ月の有効期限を設定した場合、次回のチェックのタイミングでファイルは異次元へと旅立ちます。

ファイル名の変更(rename)やパーミッションの変更(chmod)などでも mtime は更新されないようなので、ファイルの期限(時限)設定の使いかたには少しコツが必要そうです。

テキストエディタで直接編集を行えば、タイムスタンプ(mtime)は更新されます。