Làm thế nào là /tmp
thư mục được làm sạch? Có tự động không? Nếu vậy, bao lâu thì nó được làm sạch?
Làm thế nào là /tmp
thư mục được làm sạch? Có tự động không? Nếu vậy, bao lâu thì nó được làm sạch?
Câu trả lời:
Ghi chú! Câu trả lời này đã lỗi thời kể từ ít nhất là Ubuntu 14.04. Xem các câu trả lời khác cho tình huống hiện tại và nếu chúng chứng minh đúng thì hãy nâng cấp chúng một cách giận dữ. Cũng gửi bình luận để tôi có thể đặt liên kết ở đây để trả lời đúng hiện tại.
Đối với 14.04, hãy xem https://askubfox.com/a/759048/1366
Để biết 16.10, hãy xem https://askubfox.com/a/857154/453746
Câu trả lời cũ từ năm 2011:
Việc làm sạch /tmp
được thực hiện bởi các kịch bản mới nổi /etc/init/mounted-tmp.conf
. Kịch bản được chạy bởi khởi động mọi lúc /tmp
được gắn kết. Thực tế điều đó có nghĩa là tại mỗi lần khởi động.
Kịch bản thực hiện đại khái như sau: nếu một tệp trong /tmp
cũ hơn $TMPTIME
ngày thì nó sẽ bị xóa.
Giá trị mặc định $TMPTIME
là 0, có nghĩa là mọi tệp và thư mục /tmp
bị xóa. $TMPTIME
là một biến môi trường được định nghĩa trong /etc/default/rcS
.
Thư mục được xóa theo mặc định tại mỗi lần khởi động, bởi vì TMPTIME
0 theo mặc định.
Tại đây bạn có thể thay đổi thời gian trong tệp sau:
/etc/default/rcS
TMPTIME
cho biết mức độ thường xuyên của tmp dir sẽ bị xóa trong vài ngày
tmpreaper
một cơ hội.
tmpwatch
nên là một công cụ thích hợp.
Mặc dù /tmp
thư mục không phải là nơi lưu trữ các tệp lâu dài, đôi khi bạn muốn giữ mọi thứ lâu hơn một chút so với lần khởi động lại tiếp theo , đây là mặc định trên các hệ thống Ubuntu. Tôi biết một hoặc hai lần tôi đã tải xuống một cái gì đó /tmp
trong quá trình thử nghiệm, khởi động lại sau khi thực hiện thay đổi và sau đó mất dữ liệu gốc. Điều này có thể được thay đổi nếu bạn muốn giữ các /tmp
tệp của mình lâu hơn một chút.
Thay đổi /tmp
tần số dọn dẹp
Cài đặt mặc định cho hệ thống của bạn xóa /tmp
khi khởi động lại được giữ trong /etc/default/rcS
tệp. Giá trị chúng ta sẽ xem xét là TMPTIME
.
Giá trị hiện tại của việc TMPTIME=0
xóa các tệp khi khởi động lại mặc dù tuổi của tệp. Thay đổi giá trị này thành một số (dương) khác sẽ thay đổi số ngày một tệp có thể tồn tại /tmp
.
TMPTIME=7
Cài đặt này sẽ cho phép các tệp ở lại /tmp
cho đến khi chúng được một tuần tuổi, và sau đó xóa chúng trong lần khởi động lại tiếp theo. Một số âm ( TMPTIME=-1
) cho hệ thống không bao giờ xóa bất cứ thứ gì trong /tmp
. Đây có lẽ không phải là thứ bạn muốn, nhưng có sẵn.
/etc/init/mounted-temp.conf
, nhưng nó có dòng start on mounted MOUNTPOINT=/tmp
khiến tôi nghĩ rằng nó không thể áp dụng được.
/var/tmp
thay vì /tmp
.
Tôi đang kiểm tra điều này trên Ubuntu 16.10. Tôi có thể xác nhận rằng chỉnh sửa / etc / default / rcS không còn hiệu lực nữa và các tệp trong tmp bị xóa sạch bằng cách khởi động lại bất kể bạn đặt gì vào tệp đó. Như những người khác đề cập, tmpreaper không còn được sử dụng.
Tôi nghĩ rằng câu trả lời đúng là Ubuntu 16.10 có thiết lập mới. Có một thư mục /etc/tmpfiles.d, được ghi lại trong trang man "tmpfiles.d". Trong thư mục đó, người ta nên đặt một tệp cấu hình để kiểm soát xem / tmp có bị xóa hay không. Đây là những gì tôi đang làm để ngăn chặn việc khởi động lại xóa các tệp trong / tmp trừ khi chúng được 20 ngày tuổi:
#/etc/tmpfiles.d/tmp.conf
d /tmp 1777 root root 20d
Thay thế "20d" bằng "-" nếu bạn không bao giờ muốn xóa tệp. Đây là nỗ lực tốt nhất của tôi, trang người đàn ông đó gần như không thể xuyên thủng với chi tiết.
Ưu điểm của thiết lập mới là trình dọn dẹp tệp vẫn có thể chạy ngay cả khi hệ thống không được khởi động lại (như trong trường hợp luôn có trên máy chủ). Đó là một điểm cộng lớn, tôi nghĩ vậy.
man tmpfiles.d
d /tmp/ - - - 20d
systemctl start systemd-tmpfiles-clean
Trong Ubuntu 14.04, điều này được thực hiện bởi tmpreaper
, được gọi là hàng ngày bởi cron (từ /etc/cron.daily
). Chương trình có thể được cấu hình thông qua /etc/default/rcS
và /etc/tmpreaper.conf
.
Nó được dọn sạch mỗi khi bạn khởi động lại.
tmpreaper
.
Trong systemd
Ubuntu (15.10 trở lên), điều này được thực hiện bởi systemd, sử dụng systemd-tmpfiles-clean
dịch vụ và bộ đếm thời gian:
$ systemctl cat systemd-tmpfiles-clean.service
# /lib/systemd/system/systemd-tmpfiles-clean.service
# 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=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-sync.target
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle
Và
$ systemctl cat systemd-tmpfiles-clean.timer
# /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
Vì vậy, systemd-tmpfiles-clean
chạy trên tắt máy, và một lần mỗi ngày khác. Các tập tin nó làm sạch có thể được mở rộng bằng cách sử dụng /etc/tmpfiles.d
được đề cập trong câu trả lời khác .
Bạn có thể tự thay đổi hành vi hẹn giờ bằng cách sử dụng systemctl edit systemd-tmpfiles-clean.timer
và sử dụng các Timer
tùy chọn cấu hình systemd khác nhau (xem man 5 systemd.timer
).
/tmp
vẫn chưa được làm sạch. và tôi cần nó để được làm sạch ngay cả bắt đầu bằng tay sudo systemctl start systemd-tmpfiles-clean
cũng không làm được. Bất cứ ý tưởng tại sao?
Trên một trong những máy chủ của chúng tôi chạy Ubuntu, chúng tôi có một tập lệnh để xóa các tệp trong / tmp và nó chạy hàng đêm.
Kịch bản là:
#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly
/usr/bin/find /tmp -type f -atime +2 -mtime +2 |xargs /bin/rm -f &&
/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&
/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&
/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;
Chỉ cần lưu các nội dung trên vào một tệp chmod 775 tệp và tạo một mục cron để chạy nó. Vì đây là một máy chủ web, chúng tôi không muốn khởi động lại nó vì những lý do rõ ràng.
ln -s /usr /tmp/kaboom
hoặc thậm chí ln -s /* /tmp/
...
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
/ etc / fstab.