Pertanyaan Bagaimana direktori / tmp dibersihkan?


Bagaimana caranya /tmp direktori dibersihkan? Apakah ini otomatis? Jika ya, seberapa sering dibersihkan?


262
2018-01-09 19:26


asal


File temporer saya tidak pernah ditulis ke disk. Mereka ditulis ke disk RAM. Saya memang melakukannya tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 di / etc / fstab. - Anonymous


Jawaban:


Catatan! Jawaban ini sudah ketinggalan jaman setidaknya sejak ubuntu 14.04. Lihat jawaban lain untuk situasi saat ini dan jika mereka terbukti benar maka upvote mereka dengan marah. Juga kirimkan komentar sehingga saya dapat menempatkan 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. Skrip dijalankan oleh pemula setiap saat /tmp sudah terpasang. Secara praktis itu berarti di setiap boot.

Skrip melakukan kira-kira hal berikut: jika file dalam /tmp lebih tua dari $TMPTIME hari itu akan dihapus.

Nilai default dari $TMPTIME adalah 0, yang berarti setiap file dan direktori di /tmp dihapus. $TMPTIME adalah variabel lingkungan yang didefinisikan dalam /etc/default/rcS.


178
2018-01-10 00:17



Itu tidak benar untuk 14.04 lagi (skrip tidak ada lagi). - Martin Schröder
@Martin Schröder - skrip ada di sistem saya & itu adalah instalasi bersih dari 14.04 dan tmpreaper tidak ada! - Lance Holland
Saya menggunakan arch linux sekarang jadi saya tidak bisa memverifikasi. Maaf. Harap seseorang memverifikasi ini dan memberi komentar atau mengedit jawaban saya. - lesmana
di ubuntu 16.04 tmpreaper ditinggalkan sebagai tidak aman, silakan lihat: fossies.org/linux/tmpreaper/debian/README.security - Tamerlaha


Direktori dihapus secara default di setiap boot, karena TMPTIME adalah 0 secara default.

Di sini Anda dapat mengubah waktu dalam file berikut:

/etc/default/rcS

TMPTIME mengatakan seberapa sering tmp dir bisa dibersihkan dalam beberapa hari


135
2018-01-09 19:35



Membersihkan pada setiap boot tidak ideal untuk mesin yang tidak pernah di-boot ulang, seperti server. Saya memiliki lebih dari 500.000 file yang mengambil ruang 5GB di / tmp saya karena server saya memiliki 378 hari waktu kerja. Saya enggan untuk merebootnya, hanya karena membersihkan file-file tersebut saat reboot akan memakan waktu berjam-jam. - rjmunro
Dalam kasus Anda, Anda harus memberi tmpreaper sebuah kesempatan. - qbi
Pekerjaan CRON bisa dengan mudah menyelesaikannya. - Ken Sharp
Juga tmpwatch harus menjadi alat yang tepat. - ArekBulski
Sepertinya Ubuntu / systemd sudah memberikan solusi. Saya akan mengatakan lebih banyak tapi .... systemd. - Ken Sharp


Selagi /tmp folder bukan tempat untuk menyimpan file jangka panjang, kadang-kadang Anda ingin menyimpan hal-hal sedikit lebih lama daripada lain kali saat 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 mempertahankannya /tmp file sedikit lebih lama.

Mengubah /tmp Frekuensi pembersihan

Pengaturan standar yang memberi tahu sistem Anda untuk dihapus /tmp saat reboot diadakan di /etc/default/rcS mengajukan. Nilai yang akan kita lihat adalah TMPTIME.

Nilai saat ini dari TMPTIME=0 mengatakan menghapus 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 berusia satu minggu, dan kemudian hapus pada reboot berikutnya. Angka negatif (TMPTIME=-1) memberi tahu sistem untuk tidak pernah menghapus apa pun /tmp. Ini mungkin bukan sesuatu yang Anda inginkan, tetapi tersedia.


58
2018-01-09 19:35



penjelasan yang bagus. Tetapi skrip mana yang merupakan perintah pembersihan? saya sudah melihat /etc/init/mounted-temp.conf, tetapi memiliki garis start on mounted MOUNTPOINT=/tmp yang membuat saya berpikir itu tidak berlaku. - enzotib
Jika Anda tidak ingin file dihapus secara otomatis, masukkan ke dalamnya /var/tmp dari pada /tmp. - Gilles
Ini juga berguna untuk menyimpan file yang tidak ingin hilang (bingkai video yang diberikan) saat komputer Anda mogok, mungkin karena OOM. Solusi yang lebih baik adalah memperbaiki masalah, tentu saja. :-) - Ken Sharp
Bisakah ini dilakukan di dalam Cygwin? - CMCDragonkai


Saya memeriksa ini di Ubuntu 16.10. Saya dapat menyatakan bahwa mengedit / etc / default / rcS tidak memiliki efek sama sekali lagi dan file dalam tmp dihapus dengan reboot tidak peduli apa yang Anda masukkan ke dalam file itu. Seperti yang disebutkan orang lain, tmpreaper tidak lagi digunakan.

Saya pikir jawaban yang benar adalah bahwa Ubuntu 16.10 memiliki konfigurasi baru. Ada folder /etc/tmpfiles.d, didokumentasikan di halaman manual "tmpfiles.d". Dalam folder itu, seseorang harus menempatkan file konfigurasi untuk mengontrol apakah tmp / harus dihapus. Ini adalah apa 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 tak dapat ditembus dengan detail.

Keuntungan dari pengaturan baru adalah bahwa file cleaner tetap dapat berjalan bahkan jika sistem tidak reboot (seperti dalam kasus yang selalu di server). Itu plus besar, saya pikir.


29
2017-12-05 04:10



man tmpfiles.d - Martin Schröder
Saya menemukan bahwa Anda dapat mempertahankan izin file asli dan pemilik dengan menggunakan tanda hubung: d /tmp/ - - - 20d - Dave Yarwood
Juga perlu diperhatikan: Anda dapat menguji konfigurasi Anda dengan menjalankan pekerjaan pembersihan secara manual: systemctl start systemd-tmpfiles-clean - Dave Yarwood


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.


26
2018-04-19 12:00



pada sistem saya, tmpreaper tidak ada di /etc/cron.daily - tetapi saya bisa menginstalnya dengan apt-get - Joe Germuska


Sebelum 14.04:

Ini dibersihkan setiap kali Anda reboot.


10
2018-01-09 19:34



Muncul dengan 14.04+ hanya menggunakan tmpreaper, bukan skrip "per boot" FWIW - rogerdpack
Sistem 14.04 saya semuanya bersih saat reboot. Bahkan tidak pernah mendengarnya tmpreaper. - Ken Sharp
bagaimana jika Anda tidak pernah me-reboot sistem? - phuclv


Di salah satu server kami yang menjalankan Ubuntu, kami memiliki skrip untuk menghapus file di / tmp dan itu 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 {} \;

Simpan saja isi di atas ke file chmod 775 file dan buat entri cron untuk menjalankannya. Karena ini adalah server web, kami tidak ingin merebootnya untuk alasan yang jelas.


5
2017-09-28 04:54



Anda mungkin lebih baik menggunakan tmpwatch. - poolie
Baris terakhir sangat berbahaya. Biasanya, semua orang bisa berlari ln -s /usr /tmp/kaboom atau bahkan ln -s /* /tmp/ ... - Daniel Alder


Di sebuah 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

Begitu systemd-tmpfiles-clean berjalan saat shutdown, dan sekali sehari sebaliknya. File yang dibersihkan dapat diperpanjang menggunakan /etc/tmpfiles.d disebutkan dalam jawaban lain.

Anda dapat mengubah perilaku pewaktu itu sendiri menggunakan systemctl edit systemd-tmpfiles-clean.timer, dan menggunakan berbagai sistemd Timer opsi konfigurasi (lihat man 5 systemd.timer).


3
2017-12-06 17:11