return 1
}
+# 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 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/<SERVICE> 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
+
+ /bin/systemctl show "$SERVICE".service | grep -q LoadError= && return 1 || return 0
+}
+
status_all() {
local SERVICE TYPE
cd ${SERVICEDIR}
SERVICE=
USE_UPSTART=
+USE_SYSTEMD=
if [ -d /etc/rc.d/init.d ]; then
SERVICEDIR="/etc/rc.d/init.d"
echo "${VERSION}" >&2
exit 0
;;
- --ignore-dependencies)
- export SYSTEMCTL_IGNORE_DEPENDENCIES=1
- shift
- ;;
- --skip-redirect)
- export SYSTEMCTL_SKIP_REDIRECT=1
- shift
- ;;
+ --ignore-dependencies)
+ export SYSTEMCTL_IGNORE_DEPENDENCIES=1
+ shift
+ ;;
+ --skip-redirect)
+ export SYSTEMCTL_SKIP_REDIRECT=1
+ shift
+ ;;
--upstart)
USE_UPSTART=yes
shift
USE_UPSTART=no
shift
;;
+ --no-systemd)
+ USE_SYSTEMD=no
+ shift
+ ;;
*)
if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
status_all
esac
done
-if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
+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}
-elif [ -x /bin/systemd_booted ] && systemd_booted; then
- echo >&2 "Redirecting to /bin/systemctl ${OPTIONS} ${SERVICE}.service"
- exec /bin/systemctl ${OPTIONS} ${SERVICE}.service
else
echo "${SERVICE}: unrecognized service" >&2
exit 1