diff options
author | Devin Teske <dteske@FreeBSD.org> | 2018-10-31 20:37:12 +0000 |
---|---|---|
committer | Devin Teske <dteske@FreeBSD.org> | 2018-10-31 20:37:12 +0000 |
commit | da45b4da83c6a68c3bc3a1682ec77d44141164d2 (patch) | |
tree | 2b8b0a3b274b0b8d630092cad2311fad17fd7c15 /libexec/rc/rc.subr | |
parent | 9319dded3d53a39ab6ba093c87bcbc42115ae968 (diff) | |
download | src-da45b4da83c6a68c3bc3a1682ec77d44141164d2.tar.gz src-da45b4da83c6a68c3bc3a1682ec77d44141164d2.zip |
Add new rc keywords: enable, disable, delete
This adds new keywords to rc/service to enable/disable a service's
rc.conf(5) variable and "delete" to remove the variable.
When the "service_delete_empty" variable in rc.conf(5) is set to "YES"
(default is "NO") an rc.conf.d file (in /etc/ or /usr/local/etc) is
deleted if empty after modification using "service $foo delete".
Submitted by: lme (modified)
Reviewed by: 0mp (previous version), lme, bcr
Relnotes: yes
Sponsored by: Smule, Inc.
Differential Revision: https://reviews.freebsd.org/D17113
Notes
Notes:
svn path=/head/; revision=339971
Diffstat (limited to 'libexec/rc/rc.subr')
-rw-r--r-- | libexec/rc/rc.subr | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/libexec/rc/rc.subr b/libexec/rc/rc.subr index 56eccdb15b0d..072eda2cebf6 100644 --- a/libexec/rc/rc.subr +++ b/libexec/rc/rc.subr @@ -922,7 +922,7 @@ run_rc_command() eval _override_command=\$${name}_program command=${_override_command:-$command} - _keywords="start stop restart rcvar enabled describe extracommands $extra_commands" + _keywords="start stop restart rcvar enable disable delete enabled describe extracommands $extra_commands" rc_pid= _pidcmd= _procname=${procname:-${command}} @@ -977,12 +977,13 @@ run_rc_command() if [ "$_elem" != "$rc_arg" ]; then continue fi - # if ${rcvar} is set, $1 is not "rcvar" and not "describe" - # and ${rc_pid} is not set, then run + # if ${rcvar} is set, $1 is not "rcvar", "describe", + # "enable" or "delete", and ${rc_pid} is not set, run: # checkyesno ${rcvar} # and return if that failed # if [ -n "${rcvar}" -a "$rc_arg" != "rcvar" -a "$rc_arg" != "stop" \ + -a "$rc_arg" != "delete" -a "$rc_arg" != "enable" \ -a "$rc_arg" != "describe" ] || [ -n "${rcvar}" -a "$rc_arg" = "stop" -a -z "${rc_pid}" ]; then if ! checkyesno ${rcvar}; then @@ -1030,6 +1031,31 @@ run_rc_command() echo "$extra_commands" ;; + enable) + _out=$(/usr/sbin/sysrc -vs "$name" "$rcvar=YES") && + echo "$name enabled in ${_out%%:*}" + ;; + + disable) + _out=$(/usr/sbin/sysrc -vs "$name" "$rcvar=NO") && + echo "$name disabled in ${_out%%:*}" + ;; + + delete) + _files= + for _file in $(sysrc -lEs "$name"); do + _out=$(sysrc -Fif $_file "$rcvar") && _files="$_files $_file" + done + /usr/sbin/sysrc -x "$rcvar" && echo "$rcvar deleted in ${_files# }" + # delete file in rc.conf.d if desired and empty. + checkyesno service_delete_empty || _files= + for _file in $_files; do + [ "$_file" = "${_file#*/rc.conf.d/}" ] && continue + [ $(/usr/bin/stat -f%z $_file) -gt 0 ] && continue + /bin/rm "$_file" && echo "Empty file $_file removed" + done + ;; + status) _run_rc_precmd || return 1 if [ -n "$rc_pid" ]; then |