On 2015-02-17 Tue 14:24 PM |, Antoine Jacoutot wrote: > On Tue, Feb 17, 2015 at 01:20:03PM +0000, Craig Skinner wrote: > > Produces (on 5.6 release) - with start up order reversed: > > > > <root@box:~ 0># halt -p > > stopping package daemons: greyscanner postfix sshguard. > > stopping base daemons: cron spamlogd spamd sshd ntpd unbound nsd pflogd > > syslogd. > > syncing disks... done > > I cooked a patch for that a few months ago (actually >1 year ago iirc) but we > decided not to go down that road for a reason I cannot recall right now. > And I was using the information from /var/run/rc.d instead to know what to > shutdown exactly instead of greping /etc/rc. >
Changed to skip pflogd, syslogd & check /var/run/rc.d/ Index: rc =================================================================== RCS file: /cvs/src/etc/rc,v retrieving revision 1.447 diff -u -p -r1.447 rc --- rc 22 Jan 2015 19:00:24 -0000 1.447 +++ rc 20 Feb 2015 16:38:49 -0000 @@ -131,17 +131,42 @@ fill_baddynamic() } } -start_daemon() +start_stop_daemon() { - local _n - for _n; do - eval _do=\${${_n}_flags} - if [ X"${_do}" != X"NO" ]; then - /etc/rc.d/${_n} start - fi + local _start_stop=$1 + local _daemon _daemon_script + shift + + for _daemon + do + eval _do=\${${_daemon}_flags} + [[ ${_do} == 'NO' ]] && continue + + _daemon_script="/etc/rc.d/${_daemon}" + [[ -e ${_daemon_script} ]] || + { + print -n -- " ${_daemon}(absent)" + continue + } + [[ -x ${_daemon_script} ]] || + { + print -n -- " ${_daemon}(inexecutable)" + continue + } + ${_daemon_script} ${_start_stop} done } +start_daemon() +{ + start_stop_daemon 'start' $* +} + +stop_daemon() +{ + start_stop_daemon 'stop' $* +} + make_keys() { if [ ! -f /etc/isakmpd/private/local.key ]; then @@ -269,12 +294,26 @@ if [ X"$1" = X"shutdown" ]; then while [ -n "${pkg_scripts}" ]; do _r=${pkg_scripts##* } pkg_scripts=${pkg_scripts%%*( )${_r}} - [ -x /etc/rc.d/${_r} ] && /etc/rc.d/${_r} stop + stop_daemon ${_r} done echo '.' fi [ -f /etc/rc.shutdown ] && sh /etc/rc.shutdown + + print -n 'stopping base daemons:' + set -A _daemons $(egrep "start_daemon[[:blank:]][[:alnum:]]" /etc/rc) + for _daemon in $(jot ${#_daemons[*]} ${#_daemons[*]} 1) + do + _daemon=${_daemons[${_daemon}]} + [[ ${_daemon} == 'start_daemon' ]] && continue + [[ -f /var/run/rc.d/${_daemon} ]] || continue + [[ ${_daemon} == 'pflogd' ]] && continue + [[ ${_daemon} == 'syslogd' ]] && continue + stop_daemon ${_daemon} + done + print '.' + else echo single user: not running shutdown scripts fi @@ -513,11 +552,7 @@ rm -f /etc/rc.firsttime.run if [ -n "${pkg_scripts}" ]; then echo -n 'starting package daemons:' for _r in $pkg_scripts; do - if [ -x /etc/rc.d/${_r} ]; then - start_daemon ${_r} - else - echo -n " ${_r}(absent)" - fi + start_daemon ${_r} done echo '.' fi