diff options
author | Mark Felder <feld@FreeBSD.org> | 2016-02-10 16:13:59 +0000 |
---|---|---|
committer | Mark Felder <feld@FreeBSD.org> | 2016-02-10 16:13:59 +0000 |
commit | 0ba5cf0e445429647ca95f9bff3bc5fd7fc0fc8c (patch) | |
tree | 67f8b9162cfb9df87794646ca7ae271b5e26dc38 /etc | |
parent | 1e2b39a3f2fdc80f9b44f310ab4a49791486866b (diff) | |
download | src-0ba5cf0e445429647ca95f9bff3bc5fd7fc0fc8c.tar.gz src-0ba5cf0e445429647ca95f9bff3bc5fd7fc0fc8c.zip |
Add new rc.conf parameter "jail_reverse_stop"
When a user defines "jail_list" in rc.conf the jails are started in the
order defined. Currently the jails are not are stopped in reverse order
which may break dependencies between jails/services and prevent a clean
shutdown. The new parameter "jail_reverse_stop" will shutdown jails in
"jail_list" in reverse order when set to "YES".
Please note that this does not affect manual invocation of the jail rc
script. If a user runs the command
# service jail stop jail1 jail2 jail3
the jails will be stopped in exactly the order specified regardless of
jail_reverse_stop being defined in rc.conf.
PR: 196152
Approved by: jamie
MFC after: 1 week
Relnotes: yes
Differential Revision: https://reviews.freebsd.org/D5233
Notes
Notes:
svn path=/head/; revision=295471
Diffstat (limited to 'etc')
-rw-r--r-- | etc/defaults/rc.conf | 1 | ||||
-rwxr-xr-x | etc/rc.d/jail | 10 |
2 files changed, 9 insertions, 2 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index 69b6d0f77bd0..b9c6b5cc4d6e 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -694,6 +694,7 @@ iovctl_files="" # Config files for iovctl(8) jail_enable="NO" # Set to NO to disable starting of any jails jail_parallel_start="NO" # Start jails in the background jail_list="" # Space separated list of names of jails +jail_reverse_stop="NO" # Stop jails in reverse order ############################################################## ### Define source_rc_confs, the mechanism used by /etc/rc.* ## diff --git a/etc/rc.d/jail b/etc/rc.d/jail index b33f1b9a2c23..2d4898969e0f 100755 --- a/etc/rc.d/jail +++ b/etc/rc.d/jail @@ -521,7 +521,11 @@ jail_stop() command=$jail_program rc_flags=$jail_flags command_args="-f $jail_conf -r" - $jail_jls name | while read _j; do + if checkyesno jail_reverse_stop; then + $jail_jls name | tail -r + else + $jail_jls name + fi | while read _j; do echo -n " $_j" _tmp=`mktemp -t jail` || exit 3 $command $rc_flags $command_args $_j >> $_tmp 2>&1 @@ -536,6 +540,7 @@ jail_stop() return ;; esac + checkyesno jail_reverse_stop && set -- $(reverse_list $@) for _j in $@; do _j=$(echo $_j | tr /. _) _jv=$(echo -n $_j | tr -c '[:alnum:]' _) @@ -571,5 +576,6 @@ jail_warn() load_rc_config $name case $# in 1) run_rc_command $@ ${jail_list:-_ALL} ;; -*) run_rc_command $@ ;; +*) jail_reverse_stop="no" + run_rc_command $@ ;; esac |