xref: /freebsd-13.1/libexec/rc/rc.d/savecore (revision 0696600c)
1*0696600cSBjoern A. Zeeb#!/bin/sh
2*0696600cSBjoern A. Zeeb#
3*0696600cSBjoern A. Zeeb# $FreeBSD$
4*0696600cSBjoern A. Zeeb#
5*0696600cSBjoern A. Zeeb
6*0696600cSBjoern A. Zeeb# PROVIDE: savecore
7*0696600cSBjoern A. Zeeb# REQUIRE: dumpon ddb syslogd
8*0696600cSBjoern A. Zeeb# KEYWORD: nojail
9*0696600cSBjoern A. Zeeb
10*0696600cSBjoern A. Zeeb. /etc/rc.subr
11*0696600cSBjoern A. Zeeb
12*0696600cSBjoern A. Zeebname="savecore"
13*0696600cSBjoern A. Zeebrcvar="savecore_enable"
14*0696600cSBjoern A. Zeebdesc="Save a core dump of the operating system"
15*0696600cSBjoern A. Zeebstart_cmd="savecore_start"
16*0696600cSBjoern A. Zeebstart_precmd="savecore_prestart"
17*0696600cSBjoern A. Zeebstop_cmd=":"
18*0696600cSBjoern A. Zeeb
19*0696600cSBjoern A. Zeebsavecore_prestart()
20*0696600cSBjoern A. Zeeb{
21*0696600cSBjoern A. Zeeb	# Quit if we have no dump device
22*0696600cSBjoern A. Zeeb	case ${dumpdev} in
23*0696600cSBjoern A. Zeeb	[Nn][Oo] | '')
24*0696600cSBjoern A. Zeeb		debug 'No dump device. Quitting.'
25*0696600cSBjoern A. Zeeb		return 1
26*0696600cSBjoern A. Zeeb		;;
27*0696600cSBjoern A. Zeeb	[Aa][Uu][Tt][Oo])
28*0696600cSBjoern A. Zeeb		if [ ! -L /dev/dumpdev ]; then
29*0696600cSBjoern A. Zeeb			return 1
30*0696600cSBjoern A. Zeeb		fi
31*0696600cSBjoern A. Zeeb		dumpdev=`/bin/realpath /dev/dumpdev`
32*0696600cSBjoern A. Zeeb		;;
33*0696600cSBjoern A. Zeeb	esac
34*0696600cSBjoern A. Zeeb
35*0696600cSBjoern A. Zeeb	# If there is no crash directory set it now
36*0696600cSBjoern A. Zeeb	case ${dumpdir} in
37*0696600cSBjoern A. Zeeb	'')
38*0696600cSBjoern A. Zeeb		dumpdir='/var/crash'
39*0696600cSBjoern A. Zeeb		;;
40*0696600cSBjoern A. Zeeb	[Nn][Oo])
41*0696600cSBjoern A. Zeeb		dumpdir='NO'
42*0696600cSBjoern A. Zeeb		;;
43*0696600cSBjoern A. Zeeb	esac
44*0696600cSBjoern A. Zeeb
45*0696600cSBjoern A. Zeeb	if [ ! -c "${dumpdev}" ]; then
46*0696600cSBjoern A. Zeeb		warn "Dump device does not exist.  Savecore not run."
47*0696600cSBjoern A. Zeeb		return 1
48*0696600cSBjoern A. Zeeb	fi
49*0696600cSBjoern A. Zeeb
50*0696600cSBjoern A. Zeeb	if [ ! -d "${dumpdir}" ]; then
51*0696600cSBjoern A. Zeeb		warn "Dump directory does not exist.  Savecore not run."
52*0696600cSBjoern A. Zeeb		return 1
53*0696600cSBjoern A. Zeeb	fi
54*0696600cSBjoern A. Zeeb	return 0
55*0696600cSBjoern A. Zeeb}
56*0696600cSBjoern A. Zeeb
57*0696600cSBjoern A. Zeebsavecore_start()
58*0696600cSBjoern A. Zeeb{
59*0696600cSBjoern A. Zeeb	local dev
60*0696600cSBjoern A. Zeeb
61*0696600cSBjoern A. Zeeb	case "${dumpdev}" in
62*0696600cSBjoern A. Zeeb	[Aa][Uu][Tt][Oo])
63*0696600cSBjoern A. Zeeb		dev=
64*0696600cSBjoern A. Zeeb		;;
65*0696600cSBjoern A. Zeeb	*)
66*0696600cSBjoern A. Zeeb		dev="${dumpdev}"
67*0696600cSBjoern A. Zeeb		;;
68*0696600cSBjoern A. Zeeb	esac
69*0696600cSBjoern A. Zeeb
70*0696600cSBjoern A. Zeeb	if savecore -C "${dev}" >/dev/null; then
71*0696600cSBjoern A. Zeeb		savecore ${savecore_flags} ${dumpdir} ${dumpdev}
72*0696600cSBjoern A. Zeeb		if checkyesno crashinfo_enable; then
73*0696600cSBjoern A. Zeeb			${crashinfo_program} -b -d ${dumpdir}
74*0696600cSBjoern A. Zeeb		fi
75*0696600cSBjoern A. Zeeb		sync
76*0696600cSBjoern A. Zeeb	else
77*0696600cSBjoern A. Zeeb		check_startmsgs && echo 'No core dumps found.'
78*0696600cSBjoern A. Zeeb	fi
79*0696600cSBjoern A. Zeeb}
80*0696600cSBjoern A. Zeeb
81*0696600cSBjoern A. Zeebload_rc_config $name
82*0696600cSBjoern A. Zeebrun_rc_command "$1"
83