X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=service;h=337465709b829e450180dd84e83d44222c857f22;hb=e99ccdf7ce570a3a6cf7c7d8ebcde0680d57465d;hp=cf7b1bc73b07f2be7287a6caddea6bbe24f87502;hpb=8e9e592e743f84815de41153b406df19d4252ed9;p=projects%2Frc-scripts.git diff --git a/service b/service index cf7b1bc7..33746570 100755 --- a/service +++ b/service @@ -16,12 +16,55 @@ is_ignored_file() { return 1 } -# check if SERVICE is present in systemd +# check if SERVICE is present in systemd and ACTION is valid systemctl command # returns false if systemd is disabled or not active is_systemd_service() { - local SERVICE=$1 + local SERVICE=$1 ACTION=$2 [ "$USE_SYSTEMD" = "no" ] && return 1 + + # if we are called from systemd itself, because some .service specified + # invocation via /sbin/service. this avoids loops + # detect this via CMDLINE var, which has leaked from geninitrd + if [ -n "$CMDLINE" ]; then + echo >&2 "Warning: CMDLINE env set, likely you are defining .service to use /sbin/service, please use /etc/rc.d/init.d/ instead" + return 1 + fi + + case "$ACTION" in + # list obtained as: man systemctl | grep N.*A.*M.*E + start | \ + stop | \ + reload | \ + restart | \ + try-restart | \ + reload-or-restart | \ + reload-or-try-restart | \ + isolate | \ + kill | \ + is-active | \ + status | \ + show | \ + reset-failed | \ + enable | \ + disable | \ + is-enabled | \ + reenable | \ + preset | \ + mask | \ + unmask | \ + link | \ + load | \ + snapshot | \ + delete | \ + set-environment | \ + unset-environment ) + ;; + *) + #echo "Not valid systemd command" + return 1 + esac + [ -x /bin/systemd_booted ] || return 1 /bin/systemd_booted || return 1 @@ -141,9 +184,9 @@ while [ $# -gt 0 ]; do esac done -if is_systemd_service "${SERVICE}"; then - echo >&2 "Redirecting to /bin/systemctl ${ACTION} ${SERVICE}.service ${OPTIONS}" - exec /bin/systemctl ${ACTION} ${SERVICE}.service ${OPTIONS} +if is_systemd_service "${SERVICE}" "${ACTION}"; then + echo >&2 "Redirecting to /bin/systemctl --output=cat ${ACTION} ${SERVICE}.service ${OPTIONS}" + exec /bin/systemctl --output=cat ${ACTION} ${SERVICE}.service ${OPTIONS} elif [ -x "${SERVICEDIR}/${SERVICE}" ]; then exec env -i USE_UPSTART=$USE_UPSTART LANG=$LANG PATH=$PATH TERM=$TERM "${SERVICEDIR}/${SERVICE}" ${ACTION} ${OPTIONS} else