xref: /freebsd/libexec/rc/rc.d/savecore (revision ccc806a049383e5611b3752e6f384cf03a208039)
10696600cSBjoern A. Zeeb#!/bin/sh
20696600cSBjoern A. Zeeb#
30696600cSBjoern A. Zeeb# $FreeBSD$
40696600cSBjoern A. Zeeb#
50696600cSBjoern A. Zeeb
60696600cSBjoern A. Zeeb# PROVIDE: savecore
70696600cSBjoern A. Zeeb# REQUIRE: dumpon ddb syslogd
80696600cSBjoern A. Zeeb# KEYWORD: nojail
90696600cSBjoern A. Zeeb
100696600cSBjoern A. Zeeb. /etc/rc.subr
110696600cSBjoern A. Zeeb
120696600cSBjoern A. Zeebname="savecore"
130696600cSBjoern A. Zeebrcvar="savecore_enable"
140696600cSBjoern A. Zeebdesc="Save a core dump of the operating system"
150696600cSBjoern A. Zeebstart_cmd="savecore_start"
160696600cSBjoern A. Zeebstart_precmd="savecore_prestart"
170696600cSBjoern A. Zeebstop_cmd=":"
180696600cSBjoern A. Zeeb
190696600cSBjoern A. Zeebsavecore_prestart()
200696600cSBjoern A. Zeeb{
210696600cSBjoern A. Zeeb	# Quit if we have no dump device
220696600cSBjoern A. Zeeb	case ${dumpdev} in
23*ccc806a0SEugene Grosbein	[Nn][Oo])
240696600cSBjoern A. Zeeb		debug 'No dump device. Quitting.'
250696600cSBjoern A. Zeeb		return 1
260696600cSBjoern A. Zeeb		;;
27*ccc806a0SEugene Grosbein	[Aa][Uu][Tt][Oo] | '')
280696600cSBjoern A. Zeeb		if [ ! -L /dev/dumpdev ]; then
290696600cSBjoern A. Zeeb			return 1
300696600cSBjoern A. Zeeb		fi
310696600cSBjoern A. Zeeb		dumpdev=`/bin/realpath /dev/dumpdev`
320696600cSBjoern A. Zeeb		;;
330696600cSBjoern A. Zeeb	esac
340696600cSBjoern A. Zeeb
350696600cSBjoern A. Zeeb	# If there is no crash directory set it now
360696600cSBjoern A. Zeeb	case ${dumpdir} in
370696600cSBjoern A. Zeeb	'')
380696600cSBjoern A. Zeeb		dumpdir='/var/crash'
390696600cSBjoern A. Zeeb		;;
400696600cSBjoern A. Zeeb	[Nn][Oo])
410696600cSBjoern A. Zeeb		dumpdir='NO'
420696600cSBjoern A. Zeeb		;;
430696600cSBjoern A. Zeeb	esac
440696600cSBjoern A. Zeeb
450696600cSBjoern A. Zeeb	if [ ! -c "${dumpdev}" ]; then
460696600cSBjoern A. Zeeb		warn "Dump device does not exist.  Savecore not run."
470696600cSBjoern A. Zeeb		return 1
480696600cSBjoern A. Zeeb	fi
490696600cSBjoern A. Zeeb
500696600cSBjoern A. Zeeb	if [ ! -d "${dumpdir}" ]; then
510696600cSBjoern A. Zeeb		warn "Dump directory does not exist.  Savecore not run."
520696600cSBjoern A. Zeeb		return 1
530696600cSBjoern A. Zeeb	fi
540696600cSBjoern A. Zeeb	return 0
550696600cSBjoern A. Zeeb}
560696600cSBjoern A. Zeeb
570696600cSBjoern A. Zeebsavecore_start()
580696600cSBjoern A. Zeeb{
590696600cSBjoern A. Zeeb	local dev
600696600cSBjoern A. Zeeb
610696600cSBjoern A. Zeeb	case "${dumpdev}" in
620696600cSBjoern A. Zeeb	[Aa][Uu][Tt][Oo])
630696600cSBjoern A. Zeeb		dev=
640696600cSBjoern A. Zeeb		;;
650696600cSBjoern A. Zeeb	*)
660696600cSBjoern A. Zeeb		dev="${dumpdev}"
670696600cSBjoern A. Zeeb		;;
680696600cSBjoern A. Zeeb	esac
690696600cSBjoern A. Zeeb
700696600cSBjoern A. Zeeb	if savecore -C "${dev}" >/dev/null; then
710696600cSBjoern A. Zeeb		savecore ${savecore_flags} ${dumpdir} ${dumpdev}
720696600cSBjoern A. Zeeb		if checkyesno crashinfo_enable; then
730696600cSBjoern A. Zeeb			${crashinfo_program} -b -d ${dumpdir}
740696600cSBjoern A. Zeeb		fi
750696600cSBjoern A. Zeeb		sync
760696600cSBjoern A. Zeeb	else
77325ebf37SJose Luis Duran		startmsg 'No core dumps found.'
780696600cSBjoern A. Zeeb	fi
790696600cSBjoern A. Zeeb}
800696600cSBjoern A. Zeeb
810696600cSBjoern A. Zeebload_rc_config $name
820696600cSBjoern A. Zeebrun_rc_command "$1"
83