savecore revision 180317
198184Sgordon#!/bin/sh
298184Sgordon#
398184Sgordon# $FreeBSD: head/etc/rc.d/savecore 180317 2008-07-06 07:51:29Z mtm $
498184Sgordon#
598184Sgordon
698184Sgordon# PROVIDE: savecore
798184Sgordon# REQUIRE: syslogd
8136224Smtm# BEFORE:  SERVERS
998184Sgordon# KEYWORD: nojail
1098184Sgordon
1198184Sgordon. /etc/rc.subr
1298184Sgordon
1398184Sgordonname="savecore"
1498184Sgordonstart_cmd="savecore_start"
1598184Sgordonstart_precmd="savecore_prestart"
1698184Sgordonstop_cmd=":"
1798184Sgordon
1898184Sgordonsavecore_prestart()
1998184Sgordon{
2098184Sgordon	#	${DUMPDIR} should be a directory or a symbolic link
2198184Sgordon	#	to the crash directory if core dumps are to be saved.
2298184Sgordon	#
2398184Sgordon	DUMPDIR="${dumpdir:-/var/crash}"
2498184Sgordon
25128060Smarkm	# Quit if we have no dump device
26128060Smarkm	case ${dumpdev} in
2798184Sgordon	[Nn][Oo] | '')
2898184Sgordon		debug 'No dump device. Quitting.'
29128060Smarkm		return 1
30128060Smarkm		;;
31178423Sru	[Aa][Uu][Tt][Oo])
32178423Sru		dumpdev=`/bin/realpath /dev/dumpdev`
33128060Smarkm		;;
34128060Smarkm	esac
35178423Sru
36178423Sru	# If there is no crash directory set it now
37128060Smarkm	case ${dumpdir} in
3898184Sgordon	'')
39178423Sru		dumpdir='/var/crash'
40128060Smarkm		;;
41128060Smarkm	[Nn][Oo])
42178423Sru		dumpdir='NO'
43178423Sru		;;
44128060Smarkm	esac
4598184Sgordon
46178423Sru	if [ ! -c "${dumpdev}" ]; then
47178423Sru		warn "Dump device does not exist.  Savecore not run."
48128060Smarkm		return 1
49178423Sru	fi
50178423Sru
51128060Smarkm	if [ ! -d "${dumpdir}" ]; then
5298184Sgordon		warn "Dump directory does not exist.  Savecore not run."
53128060Smarkm		return 1
54128060Smarkm	fi
55128060Smarkm	return 0
56128060Smarkm}
57128060Smarkm
58169924Srsesavecore_start()
59128060Smarkm{
60128060Smarkm	local dev
61128060Smarkm
62128060Smarkm	case "${dumpdev}" in
63128060Smarkm	[Aa][Uu][Tt][Oo])
64128060Smarkm		dev=
65128060Smarkm		;;
66128060Smarkm	*)
67128060Smarkm		dev="${dumpdev}"
68128060Smarkm		;;
69128060Smarkm	esac
70128060Smarkm
71128060Smarkm	if savecore -C "${dumpdir}" "${dev}" >/dev/null; then
72128060Smarkm		savecore ${savecore_flags} ${DUMPDIR} ${dumpdev}
73128060Smarkm	else
74128060Smarkm		[ -z "${rc_quiet}" ] && echo "No core dumps found"
7598184Sgordon	fi
7698184Sgordon}
7798184Sgordon
7898184Sgordonload_rc_config $name
7998184Sgordonrun_rc_command "$1"
8098184Sgordon