#!/usr/bin/env bash # SPDX-License-Identifier: LGPL-2.1-or-later set -eu set -o pipefail if [ "${SYSTEMD_LOG_LEVEL:-}" = "debug" ]; then set -x fi command="${1:?}" shift command -v systemctl >/dev/null || exit 0 case "$command" in install-system-units) systemctl --no-reload preset "$@" ;; install-user-units) systemctl --no-reload preset --global "$@" ;; remove-system-units) if [ -d /run/systemd/system ]; then systemctl --no-reload disable --now --no-warn "$@" else systemctl --no-reload disable --no-warn "$@" fi ;; remove-user-units) systemctl --global disable --no-warn "$@" [ -d /run/systemd/system ] || exit 0 users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p') for user in $users; do SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ systemctl --user -M "$user@" disable --now --no-warn "$@" & done wait ;; mark-restart-system-units) [ -d /run/systemd/system ] || exit 0 for unit in "$@"; do systemctl set-property "$unit" Markers=+needs-restart & done wait ;; mark-reload-system-units) [ -d /run/systemd/system ] || exit 0 for unit in "$@"; do systemctl set-property "$unit" Markers=+needs-reload & done wait ;; mark-restart-user-units) [ -d /run/systemd/system ] || exit 0 users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p') for user in $users; do for unit in "$@"; do SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ systemctl --user -M "$user@" set-property "$unit" Markers=+needs-restart & done done wait ;; mark-reload-user-units) [ -d /run/systemd/system ] || exit 0 users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p') for user in $users; do for unit in "$@"; do SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ systemctl --user -M "$user@" set-property "$unit" Markers=+needs-reload & done done wait ;; system-reload-restart|system-reload|system-restart) if [ -n "$*" ]; then echo "Unexpected arguments for '$command': $*" exit 2 fi [ -d /run/systemd/system ] || exit 0 if [[ "$command" =~ reload ]]; then systemctl daemon-reload fi if [[ "$command" =~ restart ]]; then systemctl reload-or-restart --marked fi ;; user-reload-restart|user-reload|user-restart|user-reexec) if [ -n "$*" ]; then echo "Unexpected arguments for '$command': $*" exit 2 fi [ -d /run/systemd/system ] || exit 0 if [[ "$command" =~ reexec|reload ]]; then SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s systemctl reload "user@*.service" fi if [[ "$command" =~ restart ]]; then users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p') for user in $users; do SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ systemctl --user -M "$user@" reload-or-restart --marked & done wait fi ;; *) echo "Unknown verb '$command'" exit 3 ;; esac