Bagaimana cara /tmp
membersihkan direktori? Apakah ini otomatis? Jika ya, seberapa sering dibersihkan?
Bagaimana cara /tmp
membersihkan direktori? Apakah ini otomatis? Jika ya, seberapa sering dibersihkan?
Jawaban:
Catatan! Jawaban ini sudah usang sejak setidaknya ubuntu 14.04. Lihat jawaban lain untuk situasi saat ini dan jika mereka terbukti benar maka angkatlah mereka dengan marah. Juga posting komentar sehingga saya dapat menaruh tautan di sini ke jawaban yang benar saat ini
Untuk 14,04 lihat https://askubuntu.com/a/759048/1366
Untuk 16.10 lihat https://askubuntu.com/a/857154/453746
Jawaban lama dari 2011:
Pembersihan /tmp
dilakukan oleh skrip pemula /etc/init/mounted-tmp.conf
. Script dijalankan oleh pemula setiap kali /tmp
dipasang. Praktis itu berarti di setiap boot.
Script kira-kira melakukan hal-hal berikut: jika suatu file /tmp
lebih tua dari $TMPTIME
hari maka akan dihapus.
Nilai default $TMPTIME
adalah 0, yang berarti setiap file dan direktori dalam /tmp
dihapus. $TMPTIME
adalah variabel lingkungan yang didefinisikan dalam /etc/default/rcS
.
Direktori dihapus secara default di setiap boot, karena TMPTIME
0 secara default.
Di sini Anda dapat mengubah waktu dalam file berikut:
/etc/default/rcS
TMPTIME
mengatakan seberapa sering dir tmp bisa dihapus dalam beberapa hari
tmpreaper
kesempatan.
tmpwatch
harus menjadi alat yang tepat.
Walaupun /tmp
folder tersebut bukan tempat untuk menyimpan file jangka panjang, kadang-kadang Anda ingin menyimpan beberapa hal lebih lama daripada saat Anda reboot , yang merupakan default pada sistem Ubuntu. Saya tahu satu atau dua kali saya mengunduh sesuatu /tmp
selama pengujian, reboot setelah melakukan perubahan dan kemudian kehilangan data asli lagi. Ini dapat diubah jika Anda ingin menyimpan /tmp
file Anda sedikit lebih lama.
Mengubah /tmp
Frekuensi Pembersihan
Pengaturan default yang memberitahu sistem Anda untuk menghapus /tmp
saat reboot disimpan dalam /etc/default/rcS
file. Nilai yang akan kita lihat adalah TMPTIME
.
Nilai saat ini TMPTIME=0
mengatakan hapus file saat reboot meskipun usia file. Mengubah nilai ini ke nomor (positif) yang berbeda akan mengubah jumlah hari file dapat bertahan /tmp
.
TMPTIME=7
Pengaturan ini akan memungkinkan file untuk tetap masuk /tmp
sampai mereka berumur seminggu, dan kemudian menghapusnya pada reboot berikutnya. Angka negatif ( TMPTIME=-1
) memberi tahu sistem untuk tidak pernah menghapus apa pun di /tmp
. Ini mungkin bukan sesuatu yang Anda inginkan, tetapi tersedia.
/etc/init/mounted-temp.conf
, tetapi memiliki garis start on mounted MOUNTPOINT=/tmp
yang membuat saya berpikir itu tidak berlaku.
/var/tmp
bukan /tmp
.
Saya memeriksa ini di Ubuntu 16.10. Saya dapat menyatakan bahwa pengeditan / etc / default / rcS tidak memiliki efek sama sekali dan file dalam tmp dihapus oleh reboot tidak peduli apa yang Anda masukkan ke dalam file itu. Seperti yang disebutkan orang lain, tmpreaper tidak lagi digunakan.
Saya pikir jawaban yang tepat adalah bahwa Ubuntu 16.10 memiliki pengaturan baru. Ada folder /etc/tmpfiles.d, yang didokumentasikan di halaman manual "tmpfiles.d". Dalam folder itu, seseorang harus meletakkan file konfigurasi untuk mengontrol apakah / tmp akan dihapus. Inilah yang saya lakukan untuk menghentikan reboot dari menghapus file di / tmp kecuali mereka berumur 20 hari:
#/etc/tmpfiles.d/tmp.conf
d /tmp 1777 root root 20d
Ganti "20d" dengan "-" jika Anda tidak ingin file dihapus. Ini adalah upaya terbaik saya, halaman manual itu hampir tidak bisa ditembus dengan detail.
Keuntungan dari pengaturan baru adalah bahwa pembersih file masih dapat berjalan bahkan jika sistem tidak di-boot ulang (seperti dalam kasus selalu di server). Itu nilai tambah yang besar, saya pikir.
man tmpfiles.d
d /tmp/ - - - 20d
systemctl start systemd-tmpfiles-clean
Di Ubuntu 14.04 ini dilakukan oleh tmpreaper
, yang disebut setiap hari oleh cron (dari /etc/cron.daily
). Program ini dapat dikonfigurasi melalui /etc/default/rcS
dan /etc/tmpreaper.conf
.
Itu dibersihkan setiap kali Anda reboot.
tmpreaper
.
Di systemd
Ubuntu (15.10 dan yang lebih baru), ini dilakukan oleh systemd, menggunakan systemd-tmpfiles-clean
layanan dan timer:
$ 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
Dan
$ 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
Jadi systemd-tmpfiles-clean
berjalan pada saat shutdown, dan sekali sehari sebaliknya. File yang dibersihkan dapat diperpanjang menggunakan yang /etc/tmpfiles.d
disebutkan dalam jawaban lain .
Anda dapat mengubah perilaku penghitung waktu itu sendiri menggunakan systemctl edit systemd-tmpfiles-clean.timer
, dan menggunakan berbagai Timer
opsi konfigurasi systemd (lihat man 5 systemd.timer
).
/tmp
masih belum dibersihkan. dan saya perlu dibersihkan. bahkan mulai manual sudo systemctl start systemd-tmpfiles-clean
tidak melakukan trik. Ada ide mengapa?
Di salah satu server kami yang menjalankan Ubuntu, kami memiliki skrip untuk menghapus file di / tmp dan berjalan setiap malam.
Scriptnya adalah:
#!/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 {} \;
Cukup simpan konten di atas ke file chmod 775 file dan buat entri cron untuk menjalankannya. Karena ini adalah server web, kami tidak ingin mem-boot ulang untuk alasan yang jelas.
ln -s /usr /tmp/kaboom
atau bahkan ln -s /* /tmp/
...
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
/ etc / fstab.