NetBSD/etc/rc.d/cleartmp

59 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: cleartmp,v 1.13 2018/09/30 10:38:05 martin Exp $
#
# PROVIDE: cleartmp
# REQUIRE: mountall
# BEFORE: DAEMON
$_rc_subr_loaded . /etc/rc.subr
name="cleartmp"
rcvar="clear_tmp"
start_cmd="cleartmp_start"
stop_cmd=":"
cleartmp_start()
{
echo "Clearing temporary files."
if checkyesno per_user_tmp && [ -d ${per_user_tmp_dir} ]; then
tmp_dir=${per_user_tmp_dir}
else
tmp_dir="/tmp"
# Check if /tmp was created by the perusertmp rc.d
# script and recreate it if necessary.
if [ "$(/usr/bin/readlink /tmp)" = ${per_user_tmp_dir}/@ruid ]; then
/bin/rm -rf ${tmp_dir}
/bin/mkdir ${tmp_dir}
/sbin/chown root:wheel ${tmp_dir}
/bin/chmod 1777 ${tmp_dir}
fi
fi
#
# Delete almost everything, except lost+found, quota.user,
# and quota.group in the top level. (This is not needed
# with mfs or tmpfs /tmp, but doesn't hurt anything).
#
# The find command, with "-exec ... +" instead of "-exec
# ... \;", will pass many file or dir names to each
# invocation of "rm -rf". We avoid using any glob
# patterns because of the risk of "Arg list too long"
# errors when there are very many files.
#
(cd ${tmp_dir} &&
find -x . ! -name . ! -name lost+found ! -name quota.user \
! -name quota.group -exec rm -rf -- {} \+ -type d -prune)
# if requested, create symlink for /var/shm
if [ -n "${var_shm_symlink}" ]; then
/bin/rm -rf /var/shm
/bin/mkdir -m 1777 "${var_shm_symlink}"
/bin/ln -s "${var_shm_symlink}" /var/shm
fi
}
load_rc_config $name
run_rc_command "$1"