198184Sgordon#!/bin/sh
298184Sgordon#
398184Sgordon# $FreeBSD$
498184Sgordon#
598184Sgordon
698184Sgordon# PROVIDE: bgfsck
7148274Sobrien# REQUIRE: cron devfs syslogd
8136224Smtm# KEYWORD: nojail
998184Sgordon
1098184Sgordon. /etc/rc.subr
1198184Sgordon
12273013Shrsname="background_fsck"
13298514Slmedesc="Run fsck in background"
1498184Sgordonrcvar="background_fsck"
15108018Smckusickstart_cmd="bgfsck_start"
16287614Shrsstart_precmd="bgfsck_start_precmd"
1798184Sgordonstop_cmd=":"
1898184Sgordon
19287614Shrsbgfsck_start_precmd()
20287614Shrs{
21287614Shrs	if [ $($ID -u) != 0 ]; then
22287614Shrs		err 1 "Must be root."
23287614Shrs	fi
24287614Shrs}
25287614Shrs
26238416Skevlobgfsck_start()
27108018Smckusick{
28287614Shrs	: ${background_fsck_delay=0}
29287614Shrs	if [ -n "${rc_force}" ]; then
30167437Sbrooks		background_fsck_delay=0
31167437Sbrooks	fi
32167437Sbrooks	if [ ${background_fsck_delay} -lt 0 ]; then
33287614Shrs		warn "Background file system checks delayed indefinitely"
34167437Sbrooks		return 0
35167437Sbrooks	fi
36167437Sbrooks
37108018Smckusick	bgfsck_msg='Starting background file system checks'
38167437Sbrooks	if [ "${background_fsck_delay}" -gt 0 ]; then
39108018Smckusick		bgfsck_msg="${bgfsck_msg} in ${background_fsck_delay} seconds"
40108018Smckusick	fi
41167437Sbrooks	if [ -z "${rc_force}" ]; then
42197947Sdougb		check_startmsgs && echo "${bgfsck_msg}."
43167437Sbrooks	fi
44108018Smckusick
45108018Smckusick	(sleep ${background_fsck_delay}; nice -4 fsck -B -p) 2>&1 | \
46113904Smatusita	    logger -p daemon.notice -t fsck &
47108018Smckusick}
48108018Smckusick
4998184Sgordonload_rc_config $name
5098184Sgordonrun_rc_command "$1"
51