On Wed, Sep 30, 2015 at 12:30:52PM +0200, Martijn van Duren wrote:
> ping
I am still pondering the pros and cons...
> On 09/25/15 14:44, Martijn van Duren wrote:
> >On 09/25/15 14:03, Stuart Henderson wrote:
> >>On 2015/09/25 13:17, Martijn van Duren wrote:
> >>>I don't always want all daemons running all the time on my desktop,
> >>>but when
> >>>I want to start multiple daemons (for instance when doing some webdev) I
> >>>have to call rcctl multiple times, which results in multiple password
> >>>questions and long commands (I know I could set up doas.conf with the
> >>>nopass
> >>>option, but I'd rather enter my password when starting a daemon):
> >>
> >>I like this a lot, but there's one small issue: if a service fails to
> >>stop/start (either due to a problem with the service, or due to not being
> >>enabled if you don't use -f) then it doesn't go on to start the remaining
> >>daemons.
> >>
> >
> >Here's an updated version with two extra minor regressions found and fixed:
> >- `rcctl <action> <blank>` results in a usage again (regression)
> >- `rcctl get(def) <blank>` doesn't results in a usage again (regression)
> >- `rcctl <action> <daemon> <daemon> ...` continues to run if a daemon
> >fails and exits with the error code of the last failed daemon.
> Index: rcctl.sh
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rcctl/rcctl.sh,v
> retrieving revision 1.79
> diff -u -p -r1.79 rcctl.sh
> --- rcctl.sh 12 Aug 2015 06:28:18 -0000 1.79
> +++ rcctl.sh 25 Sep 2015 12:34:44 -0000
> @@ -424,52 +424,76 @@ shift $((OPTIND-1))
> [ $# -gt 0 ] || usage
>
> action=$1
> -if [ "${action}" = "ls" ]; then
> - lsarg=$2
> - [[ ${lsarg} == @(all|faulty|off|on|started|stopped) ]] || usage
> -elif [ "${action}" = "order" ]; then
> - shift 1
> - svcs="$*"
> -else
> - svc=$2
> - var=$3
> - [ $# -ge 3 ] && shift 3 || shift $#
> - args="$*"
> -fi
> -
> -if [ -n "${svc}" ]; then
> - [[ ${action} ==
> @(disable|enable|get|getdef|set|start|stop|restart|reload|check) ]] || \
> - usage
> - svc_is_avail ${svc} || \
> - rcctl_err "service ${svc} does not exist" 2
> -elif [[ ${action} != @(ls|order) ]] ; then
> - usage
> -fi
> -
> -if [ -n "${var}" ]; then
> - [[ ${var} != @(class|flags|status|timeout|user) ]] && usage
> - [[ ${action} == set && ${var} = flags && ${args} = NO ]] && \
> - rcctl_err "\"flags NO\" contradicts \"${action}\""
> - [[ ${action} == set && ${var} == class ]] && \
> - rcctl_err "\"${svc}_class\" is a read-only variable set in
> login.conf(5)"
> - if svc_is_special ${svc}; then
> - if [[ ${action} == set && ${var} != status ]] || \
> - [[ ${action} == @(get|getdef) && ${var} ==
> @(class|timeout|user) ]]; then
> - rcctl_err "\"${svc}\" is a special variable, cannot
> \"${action} ${svc} ${var}\""
> +case ${action} in
> + ls)
> + lsarg=$2
> + [[ ${lsarg} == @(all|faulty|off|on|started|stopped) ]] || usage
> + ;;
> + order)
> + shift 1
> + svcs="$*"
> + ;;
> + disable|enable|start|stop|restart|reload|check)
> + shift 1
> + svcs="$*"
> + [ -z "${svcs}" ] && usage
> + for svc in ${svcs}; do
> + svc_is_avail ${svc} || \
> + rcctl_err "service ${svc} does not exist" 2
> + done
> + ;;
> + get|getdef)
> + svc=$2
> + var=$3
> + [ -z "${svc}" ] && usage
> + svc_is_avail ${svc} || \
> + rcctl_err "service ${svc} does not exist" 2
> + if [ -n "${var}" ]; then
> + [[ ${var} != @(class|flags|status|timeout|user) ]] &&
> usage
> + if svc_is_special ${svc}; then
> + [[ ${var} == @(class|timeout|user) ]] && \
> + rcctl_err "\"${svc}\" is a special
> variable, cannot \"${action} ${svc} ${var}\""
> + fi
> fi
> - fi
> -elif [ ${action} = "set" ]; then
> - usage
> -fi
> + ;;
> + set)
> + svc=$2
> + var=$3
> + [ $# -ge 3 ] && shift 3 || shift $#
> + args="$*"
> + [ -z "${svc}" ] && usage
> + svc_is_avail ${svc} || \
> + rcctl_err "service ${svc} does not exist" 2
> + [[ ${var} != @(class|flags|status|timeout|user) ]] && usage
> + [[ ${var} = flags && ${args} = NO ]] && \
> + rcctl_err "\"flags NO\" contradicts \"${action}\""
> + [[ ${var} == class ]] && \
> + rcctl_err "\"${svc}_class\" is a read-only variable set
> in login.conf(5)"
> + if svc_is_special ${svc}; then
> + [[ ${var} != status ]] && \
> + rcctl_err "\"${svc}\" is a special variable,
> cannot \"${action} ${svc} ${var}\""
> + fi
> + ;;
> + *)
> + usage
> + ;;
> +esac
>
> +status=0
> case ${action} in
> disable) # undocumented, deprecated
> needs_root ${action}
> - svc_set ${svc} status off
> + for svc in ${svcs}; do
> + svc_set ${svc} status off || status=$?;
> + done
> + exit $status
> ;;
> enable) # undocumented, deprecated
> needs_root ${action}
> - svc_set ${svc} status on
> + for svc in ${svcs}; do
> + svc_set ${svc} status on || status=$?;
> + done
> + exit $status
> ;;
> get)
> svc_get ${svc} "${var}"
> @@ -495,10 +519,13 @@ case ${action} in
> svc_set ${svc} "${var}" "${args}"
> ;;
> start|stop|restart|reload|check)
> - if svc_is_special ${svc}; then
> - rcctl_err "\"${svc}\" is a special variable, no rc.d(8)
> script"
> - fi
> - /etc/rc.d/${svc} ${_RC_DEBUG} ${_RC_FORCE} ${action}
> + for svc in ${svcs}; do
> + if svc_is_special ${svc}; then
> + rcctl_err "\"${svc}\" is a special variable, no
> rc.d(8) script"
> + fi
> + /etc/rc.d/${svc} ${_RC_DEBUG} ${_RC_FORCE} ${action} ||
> status=$?;
> + done
> + exit $status
> ;;
> *)
> usage
--
Antoine