-
-
Save TheWug/e120145f08e994d89e235e077a82ea75 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*-Shell-script-*- | |
| # /lib/lsb/init-functions | |
| _use_systemctl=0 | |
| if [ -d /run/systemd/system ]; then | |
| if [ -n "${__init_d_script_name:-}" ]; then # scripts run with new init-d-script | |
| executable="$__init_d_script_name" | |
| argument="$1" | |
| elif [ "${0##*/}" = "init-d-script" ] || | |
| [ "${0##*/}" = "${1:-}" ]; then # scripts run with old init-d-script | |
| executable="$1" | |
| argument="$2" | |
| else # plain old scripts | |
| executable="$0" | |
| argument="${1:-}" | |
| fi | |
| prog=${executable##*/} | |
| service="${prog%.sh}.service" | |
| # Don't try to run masked services. systemctl <= 230 always succeeds here, | |
| # but later systemctls fail on nonexisting units; be compatible with both | |
| state=$(systemctl -p LoadState --value show $service 2>/dev/null) || state="not-found" | |
| [ "$state" = "masked" ] && exit 0 | |
| # Redirect SysV init scripts when executed by the user | |
| if [ $PPID -ne 1 ] && [ -z "${SYSTEMCTL_SKIP_REDIRECT:-}" ]; then | |
| case $(readlink -f "$executable") in | |
| /etc/init.d/*) | |
| # If the state is not-found, this might be a newly installed SysV init | |
| # script where systemd-sysv-generator has not been run yet. | |
| [ "$state" != "not-found" ] || [ "$(id -u)" != 0 ] || systemctl --no-ask-password daemon-reload | |
| _use_systemctl=1 | |
| # Some services can't reload through the .service file, | |
| # but can through the init script. | |
| if [ "$(systemctl -p CanReload --value show $service 2>/dev/null)" = "no" ] && [ "${argument:-}" = "reload" ]; then | |
| _use_systemctl=0 | |
| fi | |
| ;; | |
| esac | |
| fi | |
| fi | |
| systemctl_redirect () { | |
| local s | |
| local rc | |
| local prog=${1##*/} | |
| local command=$2 | |
| case "$command" in | |
| start) | |
| s="Starting $prog (via systemctl)" | |
| ;; | |
| stop) | |
| s="Stopping $prog (via systemctl)" | |
| ;; | |
| reload|force-reload) | |
| s="Reloading $prog configuration (via systemctl)" | |
| ;; | |
| try-restart) | |
| s="Restarting $prog if running (via systemctl)" | |
| ;; | |
| restart) | |
| s="Restarting $prog (via systemctl)" | |
| ;; | |
| esac | |
| service="${prog%.sh}.service" | |
| # avoid deadlocks during bootup and shutdown from units/hooks | |
| # which call "invoke-rc.d service reload" and similar, since | |
| # the synchronous wait plus systemd's normal behaviour of | |
| # transactionally processing all dependencies first easily | |
| # causes dependency loops | |
| if ! systemctl --quiet is-system-running && [ "$command" = "reload" ]; then | |
| sctl_args="--no-block" | |
| fi | |
| [ "$command" = status ] || log_daemon_msg "$s" "$service" | |
| systemctl --no-pager $sctl_args $command "$service" | |
| rc=$? | |
| [ "$command" = status ] || log_end_msg $rc | |
| return $rc | |
| } | |
| if [ "$_use_systemctl" = "1" ]; then | |
| # Some init scripts use "set -e" and "set -u", we don't want that | |
| # here | |
| set +e | |
| set +u | |
| case "$argument" in | |
| start|stop|restart|reload|force-reload|try-restart|status) | |
| systemctl_redirect $executable $argument | |
| exit $? | |
| ;; | |
| esac | |
| fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment