Most of my requirements have already been available in Debian.
By default, /etc/default/rcS
sets environment variable TMPTIME=0
.
$ man rcS
:
TMPTIME
On boot the files in /tmp will be deleted if their modification time is more than TMPTIME days ago. A value of 0 means that files are removed regardless of age. If you don't want the system to clean /tmp then set TMPTIME to a negative value (e.g., -1) or to the word infinite.
Looking in /lib/init/bootclean.sh
, I found out that the quota file './aquota.user(owned by root) is excluded from removing. Conclusion: quota settings will persist during reboots and
TMPTIME=0can safely be set in
/etc/default/rcS`.
To keep /tmp
clean while running, I installed tmpreaper
.
To activate it, SHOWWARNING=true
should be commented. Furthermore, TMPREAPER_TIME=7d
should be uncommented in order to clean files older than 7 days.
A 1GB temp disk was created and formatted ext3 with:
# dd if=/dev/zero of=/var/tmpdisk bs=1K count=1000000
# mkfs.ext3 -F /var/tmpdisk
Mounting it at boot-time required a change in /etc/fstab
:
# /var/tmpdisk /tmp ext3 loop,rw,nosuid,noexec,nodev,quota 0 0
Since /var/tmpdisk
is not a real device, it should be mounted as loop device, hence loop
. nosuid,noexec,nodev
have been added as a layer of security to prevent common exploit kits from abusing /tmp
. Finally, quota
enables quota for the disk.
After modifying /etc/fstab
, I ran mount -a
to mount the new /tmp
disk. Since /tmp
should be world-writable, and users should not be able to delete files they do not own, the directory permissions should be changed too:
# chmod 1777 /tmp
Activate quotas:
# quotacheck /tmp
# quotaon /tmp
Now /tmp
fully suits my needs with quotas activated and auto-cleaning junk files. The only thing I have to do is adding quotas for each user by running edquota username
.
Throw this one liner into a bat file:
FOR /D /R c:\FOLDERLOCATION %%X IN (*.tmp) DO RMDIR /S /Q "%%X"
- /D - For Directory
- /R - Recursive
This will remove the folders ending in tmp and anything under it. If you want to get fancy you can run it like this:
@echo off
set dir="c:\FOLDERLOCATION\"
FOR /D /R %dir% %%X IN (*.tmp) DO RMDIR /S /Q "%%X"
pause
exit
Best Answer
Delete logs older than 7 days.
You probably want to add this as a cronjob too.
Before deleting temp-files, you should make sure that nothing is holding them open.