Linux + /tmp에서 파일 및 폴더 정리

Linux + /tmp에서 파일 및 폴더 정리

내 모든 Red Hat Linux 시스템 버전 7.2에서 systemd-tmpfiles-clean.service가 비활성화된 것을 볼 수 있습니다.

systemctl status systemd-tmpfiles-clean.service
● systemd-tmpfiles-clean.service - Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.service; static; vendor preset: disabled)
   Active: inactive (dead) since Wed 2018-12-19 14:47:14 UTC; 12min ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 34231 ExecStart=/usr/bin/systemd-tmpfiles --clean (code=exited, status=0/SUCCESS)
 Main PID: 34231 (code=exited, status=0/SUCCESS)

Dec 19 14:47:14 master02.uridns.com systemd[1]: Starting Cleanup of Temporary Directories...
Dec 19 14:47:14 master02.uridns.com systemd[1]: Started Cleanup of Temporary Directories.

이상한 점은 아래 파일과 폴더를 볼 수 있는데 /tmp가끔씩 정리되는 것 같습니다.

crontab이나 cronjob을 검색했지만 다른 정리 작업을 찾지 못했습니다.

여기서 뭔가 빠졌나요?

서비스가 비활성화되어 있어도 몇 주마다 정리를 수행할 수 있습니까?

  systemctl enable  systemd-tmpfiles-clean.service

The unit files have no [Install] section. They are not meant to be enabled
using systemctl.
Possible reasons for having this kind of units are:
1) A unit may be statically enabled by being symlinked from another unit's
   .wants/ or .requires/ directory.
2) A unit's purpose may be to act as a helper for some other unit which has
   a requirement dependency on it.
3) A unit may be started when needed via activation (socket, path, timer,
   D-Bus, udev, scripted systemctl call, ...).

우리는 다음과 같은 매우 오래된 폴더도 보았습니다.

ls -ltr
total 137452
drwxr-xr-x 3 root      root         33 Jun 13  2017 Tools
drwx--x--x 3 root      root         16 Oct 12 09:33 systemd-private-74982d8a24254a1d8b8ec3b5c0d80a9b-httpd.service-QZqGLA
drwx--x--x 3 root      root         16 Oct 12 10:02 systemd-private-74982d8a24254a1d8b8ec3b5c0d80a9b-rtkit-daemon.service-BTcGY1
drwx--x--x 3 root      root         16 Oct 12 10:02 systemd-private-74982d8a24254a1d8b8ec3b5c0d80a9b-vmtoolsd.service-mQ1SXc
drwxr-xr-x 2 ambari    ambari       18 Oct 12 12:02 hsperfdata_ambari
drwx--x--x 3 root      root         16 Oct 12 12:17 systemd-private-74982d8a24254a1d8b8ec3b5c0d80a9b-cups.service-PnKaq8
drwx--x--x 3 root      root         16 Oct 12 12:17 systemd-private-74982d8a24254a1d8b8ec3b5c0d80a9b-colord.service-DNn470
-rwxr-xr-x 1 root      root      83044 Nov 18 17:27 Spark_Thrift.log
drwxr-xr-x 2 zookeeper hadoop       18 Nov 18 17:28 hsperfdata_zookeeper
-rwxr-xr-x 1 root      root        379 Nov 18 17:37 requests.txt
-rwxr-xr-x 1 root      root     137348 Nov 22 14:50 pp
-rwxr-xr-x 1 root      root        344 Nov 26 15:24 yy
prwx--x--x 1 root      root          0 Nov 29 21:26 hogsuspend
-rwxr-xr-x 1 root      root       1032 Dec  3 10:55 aa

내 컴퓨터에서:

more /lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

규칙은 다음과 같습니다:

more /usr/lib/tmpfiles.d/tmp.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# See tmpfiles.d(5) for details

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp

답변1

장치의 트리거가 무엇인지 systemd에 물어볼 수 있습니다.

systemctl show -p TriggeredBy systemd-tmpfiles-clean

systemd-tmpfiles-clean이는 서비스가 타이머 에 의해 systemd-tmpfiles-clean.timer트리거 되었음을 나타냅니다 . 이는 다음과 같이 정의됩니다.

#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

따라서 서비스는 매일 실행되며 tmpfiles.d구성에 따라 디렉터리를 정리합니다. 자세한 내용은 관련 매뉴얼 페이지를 참조하십시오.

답변2

systemd-tmpfiles-clean.service에 의해 시작되었습니다 systemd-tmpfiles-clean.timer. 확인 타이머를 사용할 수 있습니다 systemctl list-timers.

적어도 Ubuntu 16.04에서는 systemd-tmpfiles-clean.timer정의가 다음과 같습니다.

# Use `systemctl cat systemd-tmpfiles-clean.timer` to get your corresponding file
#
# /lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

따라서 타이머는 systemd-tmpfiles-clean.service시작 후 15분마다 시작되고 그 이후에는 24시간마다 시작됩니다.

자세한 내용은 및 을 (를 systemd.timer(5)) 참고하십시오 .systemd.service(5)systemd.unit(5)

답변3

여기에 있는 대부분의 설명의 문제점은 파일뿐만 아니라 폴더 및 폴더 내의 모든 하위 폴더(파일 포함)를 삭제하는 데 사용하는 방법을 다루지 않는다는 것입니다.

/home/user/.cache/: 도구에 모든 폴더 등을 삭제하도록 어떻게 지시할 수 /.cache/folder1/subfolder1있습니까 folder2/subfolder1?

명령을 실행할 때 폴더가 비어 있지 않다는 오류가 발생합니다 /.cache/*. 예를 들면 다음과 같습니다.

# Delete User Space Temp Files
r /home/user/.cache/*  

실행 중:

# env SYSTEMD_LOG_LEVEL=debug systemd-tmpfiles --remove

오류가 표시되고 실제로 최상위 폴더의 파일을 제외하고는 아무것도 삭제되지 않습니다.

관련 정보