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)は更新されます。