jcs's openbsd hax
openbsd

Add a new -q ("quiet") option to rc.d(8) and rcctl(8): do not display the script name nor the result of the action. This can be used for example in newsyslog.conf when using rcctl to reload daemons.

Note that "quiet" is fully quiet, even when an error occurs (the
return code can be checked for success or failure); this can be
revisited if needed.

requested by a few in the past
ok dlg@

ajacoutot 8472bf10 3f426169

+42 -27
+22 -15
etc/rc.d/rc.subr
··· 1 - # $OpenBSD: rc.subr,v 1.163 2024/09/29 14:36:13 kn Exp $ 1 + # $OpenBSD: rc.subr,v 1.164 2025/08/10 09:30:55 ajacoutot Exp $ 2 2 # 3 3 # Copyright (c) 2010, 2011, 2014-2022 Antoine Jacoutot <ajacoutot@openbsd.org> 4 4 # Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org> ··· 106 106 for _a in ${_rc_actions}; do 107 107 _rc_not_supported ${_a} || _allsup="${_allsup:+$_allsup|}${_a}" 108 108 done 109 - _rc_err "usage: $0 [-df] ${_allsup}" 109 + _rc_err "usage: $0 [-d | -q] [-f] ${_allsup}" 110 110 } 111 111 112 112 _rc_write_runfile() { ··· 134 134 _rc_exit() { 135 135 local _pfix 136 136 [ -z "${INRC}" -o X"$1" != X"ok" ] && _pfix="($1)" 137 - echo ${INRC:+'-n'} "${_pfix}" 137 + [ -n "${_RC_QUIET}" ] || echo ${INRC:+'-n'} "${_pfix}" 138 138 [[ $1 == @(ok|killed) ]] && exit 0 || exit 1 139 139 } 140 140 ··· 145 145 kill $! 2>/dev/null # kill last job if it's running 146 146 } 147 147 148 + _rc_printname() 149 + { 150 + local _n 151 + [ -n "${_RC_DEBUG}" ] || _n="-n" 152 + [ -n "${_RC_QUIET}" ] || echo $_n "${INRC:+ }${_name}" 153 + } 154 + 148 155 _rc_sendsig() { 149 156 pkill -${1:-TERM} -T "${daemon_rtable}" -xf "${pexp}" 150 157 } ··· 198 205 } 199 206 200 207 rc_cmd() { 201 - local _exit _n _ret _timer 208 + local _exit _ret _timer 202 209 # optim: don't sleep(1) in the first loop 203 210 _1stloop=true 204 211 ··· 213 220 _rc_err "$0: $1 is not supported" 214 221 fi 215 222 216 - [ -n "${_RC_DEBUG}" ] || _n="-n" 217 - 218 223 [[ ${1} == start ]] || _rc_do _rc_parse_conf ${_RC_RUNFILE} 219 224 220 225 case "$1" in 221 226 check) 222 - echo $_n "${INRC:+ }${_name}" 227 + _rc_printname 223 228 _rc_do rc_check && _rc_exit ok || _rc_exit failed 224 229 ;; 225 230 configtest) 226 - echo $_n "${INRC:+ }${_name}" 231 + _rc_printname 227 232 _rc_do rc_configtest && _rc_exit ok || _rc_exit failed 228 233 ;; 229 234 start) ··· 231 236 _rc_err "$0: need -f to force $1 since ${_name}_flags=NO" 232 237 fi 233 238 [ -z "${INRC}" ] && _rc_do rc_check && exit 0 234 - echo $_n "${INRC:+ }${_name}" 239 + _rc_printname 235 240 while true; do # no real loop, only needed to break 236 241 # running during start is mostly useful for daemons 237 242 # whose child will not return a config parsing error to ··· 265 270 ;; 266 271 stop) 267 272 _rc_do rc_check || exit 0 268 - echo $_n "${INRC:+ }${_name}" 273 + _rc_printname 269 274 _rc_do rc_stop & _timer=$! 270 275 while ((SECONDS < daemon_timeout)); do 271 276 # last chance: send a SIGTERM first in case the process ··· 291 296 _rc_exit ${_exit:=ok} 292 297 ;; 293 298 reload) 294 - echo $_n "${INRC:+ }${_name}" 299 + _rc_printname 295 300 _rc_do rc_check || _rc_exit failed 296 301 if typeset -f rc_configtest >/dev/null; then 297 302 _rc_do rc_configtest || _rc_exit failed ··· 312 317 if typeset -f rc_configtest >/dev/null; then 313 318 _rc_do rc_configtest || _rc_exit failed 314 319 fi 315 - $0 ${_RC_DEBUG} ${_RC_FORCE} stop && 316 - $0 ${_RC_DEBUG} ${_RC_FORCE} start 320 + $0 ${_RC_DEBUG} ${_RC_FORCE} ${_RC_QUIET} stop && 321 + $0 ${_RC_DEBUG} ${_RC_FORCE} ${_RC_QUIET} start 317 322 ;; 318 323 *) 319 324 _rc_usage ··· 327 332 [ -n "${KSH_VERSION}" ] || _rc_err "$0: wrong shell, use /bin/ksh" 328 333 [ -n "${daemon}" ] || _rc_err "$0: daemon is not set" 329 334 330 - unset _RC_DEBUG _RC_FORCE 331 - while getopts "df" c; do 335 + unset _RC_DEBUG _RC_FORCE _RC_QUIET 336 + while getopts "dfq" c; do 332 337 case "$c" in 333 338 d) _RC_DEBUG=-d;; 334 339 f) _RC_FORCE=-f;; 340 + q) _RC_QUIET=-q;; 335 341 *) _rc_usage;; 336 342 esac 337 343 done 338 344 shift $((OPTIND-1)) 345 + [[ -n ${_RC_DEBUG} && -n ${_RC_QUIET} ]] && _rc_usage 339 346 340 347 _RC_RUNDIR=/var/run/rc.d 341 348 _RC_RUNFILE=${_RC_RUNDIR}/${_name}
+8 -3
share/man/man8/rc.d.8
··· 1 - .\" $OpenBSD: rc.d.8,v 1.40 2022/09/02 22:11:57 ajacoutot Exp $ 1 + .\" $OpenBSD: rc.d.8,v 1.41 2025/08/10 09:30:55 ajacoutot Exp $ 2 2 .\" 3 3 .\" Copyright (c) 2021 Antoine Jacoutot 4 4 .\" Copyright (c) 2011 Robert Nagy, Antoine Jacoutot, Ingo Schwarze ··· 25 25 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 26 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 .\" 28 - .Dd $Mdocdate: September 2 2022 $ 28 + .Dd $Mdocdate: August 10 2025 $ 29 29 .Dt RC.D 8 30 30 .Os 31 31 .Sh NAME ··· 33 33 .Nd daemon control scripts 34 34 .Sh SYNOPSIS 35 35 .Nm /etc/rc.d/ Ns Ar daemon 36 - .Op Fl df 36 + .Op Fl d | q 37 + .Op Fl f 37 38 .Ar action 38 39 .Sh DESCRIPTION 39 40 The ··· 78 79 .Dq NO , 79 80 execution will continue with the script's own defaults unless other 80 81 flags are specified. 82 + .It Fl q 83 + Quiet mode. 84 + Do not display the script name nor the result of the 85 + .Ar action . 81 86 .El 82 87 .Pp 83 88 Each such script responds to the following
+5 -4
usr.sbin/rcctl/rcctl.8
··· 1 - .\" $OpenBSD: rcctl.8,v 1.46 2024/09/29 14:36:13 kn Exp $ 1 + .\" $OpenBSD: rcctl.8,v 1.47 2025/08/10 09:30:55 ajacoutot Exp $ 2 2 .\" 3 3 .\" Copyright (c) 2014 Antoine Jacoutot <ajacoutot@openbsd.org> 4 4 .\" ··· 14 14 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 15 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 16 .\" 17 - .Dd $Mdocdate: September 29 2024 $ 17 + .Dd $Mdocdate: August 10 2025 $ 18 18 .Dt RCCTL 8 19 19 .Os 20 20 .Sh NAME ··· 25 25 .Cm get Ns | Ns Cm getdef Ns | Ns Cm set 26 26 .Ar daemon Ns | Ns Ar service Op Ar variable Op Ar argument ... 27 27 .Nm rcctl 28 - .Op Fl df 28 + .Op Fl d | q 29 + .Op Fl f 29 30 .Sm off 30 31 .Cm check | configtest | reload | restart | start | stop 31 32 .Sm on ··· 72 73 .Cm user 73 74 .Pc : 74 75 .Bl -tag -width Ds 75 - .It Oo Fl df Oc Ar action daemon ... 76 + .It Oo Fl d | q Oc Oo Fl f Oc Ar action daemon ... 76 77 Run the 77 78 .Xr rc.d 8 78 79 .Ar daemon
+7 -5
usr.sbin/rcctl/rcctl.sh
··· 1 1 #!/bin/ksh 2 2 # 3 - # $OpenBSD: rcctl.sh,v 1.120 2024/09/29 14:36:13 kn Exp $ 3 + # $OpenBSD: rcctl.sh,v 1.121 2025/08/10 09:30:55 ajacoutot Exp $ 4 4 # 5 5 # Copyright (c) 2014, 2015-2022 Antoine Jacoutot <ajacoutot@openbsd.org> 6 6 # Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org> ··· 33 33 34 34 _rc_err \ 35 35 "usage: rcctl get|getdef|set daemon|service [variable [argument ...]] 36 - rcctl [-df] ${_a} daemon ... 36 + rcctl [-d | -q] [-f] ${_a} daemon ... 37 37 rcctl disable|enable|order [daemon ...] 38 38 rcctl ls all|failed|off|on|rogue|started|stopped" 39 39 } ··· 506 506 rcconf_edit_end 507 507 } 508 508 509 - unset _RC_DEBUG _RC_FORCE 510 - while getopts "df" c; do 509 + unset _RC_DEBUG _RC_FORCE _RC_QUIET 510 + while getopts "dfq" c; do 511 511 case "$c" in 512 512 d) _RC_DEBUG=-d;; 513 513 f) _RC_FORCE=-f;; 514 + q) _RC_QUIET=-q;; 514 515 *) usage;; 515 516 esac 516 517 done 517 518 shift $((OPTIND-1)) 518 519 [ $# -gt 0 ] || usage 520 + [[ -n ${_RC_DEBUG} && -n ${_RC_QUIET} ]] && usage 519 521 520 522 action=$1 521 523 ret=0 ··· 647 649 if svc_is_special ${svc}; then 648 650 rcctl_err "\"${svc}\" is a special variable, no rc.d(8) script" 649 651 fi 650 - /etc/rc.d/${svc} ${_RC_DEBUG} ${_RC_FORCE} ${action} || ret=$?; 652 + /etc/rc.d/${svc} ${_RC_DEBUG} ${_RC_FORCE} ${_RC_QUIET} ${action} || ret=$?; 651 653 done 652 654 exit ${ret} 653 655 ;;