rc.shutdown revision 67397
1168404Spjd#!/bin/sh 2168404Spjd# 3168404Spjd# Copyright (c) 1997 Ollivier Robert 4168404Spjd# All rights reserved. 5168404Spjd# 6168404Spjd# Redistribution and use in source and binary forms, with or without 7168404Spjd# modification, are permitted provided that the following conditions 8168404Spjd# are met: 9168404Spjd# 1. Redistributions of source code must retain the above copyright 10168404Spjd# notice, this list of conditions and the following disclaimer. 11168404Spjd# 2. Redistributions in binary form must reproduce the above copyright 12168404Spjd# notice, this list of conditions and the following disclaimer in the 13168404Spjd# documentation and/or other materials provided with the distribution. 14168404Spjd# 15168404Spjd# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16168404Spjd# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17168404Spjd# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18168404Spjd# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19168404Spjd# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20168404Spjd# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21168404Spjd# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22168404Spjd# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23168404Spjd# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24168404Spjd# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25168404Spjd# SUCH DAMAGE. 26168404Spjd# 27168404Spjd# $FreeBSD: head/etc/rc.shutdown 67397 2000-10-20 20:26:05Z ache $ 28168404Spjd# 29168404Spjd 30168404Spjd# Site-specific closing actions for daemons run by init on shutdown, 31168404Spjd# or before going single-user from multi-user. 32168404Spjd# Output and errors are directed to console by init, and the 33168404Spjd# console is the controlling terminal. 34168404Spjd 35168404Spjdstty status '^T' 36168404Spjd 37168404Spjd# Set shell to ignore SIGINT (2), but not children; 38168404Spjd# shell catches SIGQUIT (3) and returns to single user after fsck. 39168404Spjdtrap : 2 40168404Spjdtrap : 3 # shouldn't be needed 41168404Spjd 42168404SpjdHOME=/ 43168404SpjdPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin 44168404Spjdexport HOME PATH 45168404Spjd 46168404Spjd# If there is a global system configuration file, suck it in. 47168404Spjd# 48168404Spjdif [ -r /etc/defaults/rc.conf ]; then 49168404Spjd . /etc/defaults/rc.conf 50168404Spjd source_rc_confs 51168404Spjdelif [ -r /etc/rc.conf ]; then 52168404Spjd . /etc/rc.conf 53168404Spjdfi 54168404Spjd 55168404Spjd# Write some entropy so the rebooting /dev/random can reseed 56168404Spjd# 57168404Spjdcase ${entropy_file} in 58168404Spjd[Nn][Oo] | '') 59168404Spjd ;; 60168404Spjd*) 61168404Spjd echo "Writing entropy file." 62168404Spjd rm -f ${entropy_file} 63168404Spjd oumask=`umask` 64168404Spjd umask 077 65168404Spjd if touch ${entropy_file} ; then 66168404Spjd entropy_file_confirmed="${entropy_file}" 67168404Spjd else 68168404Spjd # Try this as a reasonable alternative for read-only 69168404Spjd # roots, diskless workstations, etc. 70168404Spjd rm -f /var/db/entropy 71168404Spjd if touch /var/db/entropy ; then 72168404Spjd entropy_file_confirmed=/var/db/entropy 73168404Spjd fi 74168404Spjd fi 75168404Spjd case ${entropy_file_confirmed} in 76168404Spjd '') 77168404Spjd echo "ERROR: entropy file write failed" 78168404Spjd ;; 79168404Spjd *) 80168404Spjd dd if=/dev/random of=${entropy_file_confirmed} \ 81168404Spjd bs=4096 count=1 2> /dev/null 82168404Spjd ;; 83168404Spjd esac 84168404Spjd umask ${oumask} 85168404Spjd ;; 86168404Spjdesac 87168404Spjd 88168404Spjd# Check if /var/db/mounttab is clean. 89168404Spjdcase $1 in 90168404Spjdreboot) 91168404Spjd if [ -f /var/db/mounttab ]; then 92168404Spjd rpc.umntall 93168404Spjd fi 94168404Spjd ;; 95168404Spjdesac 96168404Spjd 97168404Spjdecho -n "Shutting down daemon processes:" 98168404Spjd 99168404Spjd# for each valid dir in $local_startup, search for init scripts matching *.sh 100168404Spjdcase ${local_startup} in 101168404Spjd[Nn][Oo] | '') 102168404Spjd ;; 103168404Spjd*) 104168404Spjd for dir in ${local_startup}; do 105168404Spjd if [ -d "${dir}" ]; then 106168404Spjd for script in ${dir}/*.sh; do 107168404Spjd if [ -x "${script}" ]; then 108168404Spjd (set -T 109168404Spjd trap 'exit 1' 2 110168404Spjd ${script} stop) 111168404Spjd fi 112168404Spjd done 113168404Spjd fi 114168404Spjd done 115168404Spjd echo . 116168404Spjd ;; 117168404Spjdesac 118168404Spjd 119168404Spjd# Insert other shutdown procedures here 120168404Spjd 121168404Spjdecho '.' 122168404Spjdexit 0 123168404Spjd