tmpfiles.dを検索した後、ファイル/ディレクトリの削除オプションが制限されているようです。 shredなどのコマンドを使用して一時ディレクトリを完全に削除したいと思います。 tmpfiles.d設定でスクリプトをトリガーする方法、またはtmpクリーンアップ中にshredを使用する隠しメカニズムはありますか?
答え1
はい!systemd-tmpfiles --remove
または、で構成されたディレクトリのすべての内容、またはD
でR
構成されたすべてのファイルまたはディレクトリを削除するために呼び出されます。r
R
からman systemd-tmpfiles
:
--remove
If this option is passed, the contents of directories marked with D or R,
and files or directories themselves marked with r or R are removed.
わずかに侵害が少ないため、プレフィックスで始まるディレクトリでのみフィルタリングできます。
--prefix=path
Only apply rules with paths that start with the specified prefix. This option
can be specified multiple times.
--exclude-prefix=path
Ignore rules with paths that start with the specified prefix. This option
can be specified multiple times.
または、より頻繁に清掃することもできます。 --clean
有効期限が切れた(使用期間が過ぎた)一時ファイルのみが削除されます。次の例で実行すると、前のすべての項目がsystemd-tmpfiles --clean
削除されます。/run/screens
10d
# /usr/lib/tmpfiles.d/screen.conf
# Type Path Mode User Group Age Argument
d /run/screens 1777 root screen 10d -
これはすでに次のように毎日確認されていますsystemd-tmpfiles-clean.timer
。
$ systemctl cat systemd-tmpfiles-clean.{timer,service}
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
# /lib/systemd/system/systemd-tmpfiles-clean.service
[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-set.target
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=systemd-tmpfiles --clean
SuccessExitStatus=DATAERR
IOSchedulingClass=idle
それが十分に根本的でない場合は、次のことができます。
d /my/path 0755 user group 1h -
OnUnitActiveSec=1h
そして、タイマー挿入を作成します。
または、サービスを実行している場合は、サンドボックスオプションを確認してくださいman systemd.exec
。PrivateTmp=
、RemoveIPC=
などの項目DynamicUser=
は、必要なくなったら削除できます。