}
configure_version() {
- WEB_SERVICE=${WEB_SERVICE:-$(service --status-all 2>/dev/null \
- | grep -Eo '\bnginx|httpd[^[:space:]]*' || true)}
+ if [ -n "$WEB_SERVICE" ]; then
+ SERVICE_MANAGER=$(guess_service_manager)
+ elif WEB_SERVICE=$(list_services_systemd | grep -E '^(nginx|httpd)'); then
+ SERVICE_MANAGER=systemd
+ elif WEB_SERVICE=$(list_services_service \
+ | grep -Eo '\b(nginx|httpd)[^[:space:]]*'); then
+ SERVICE_MANAGER=service
+ fi
+
if [ -z "$WEB_SERVICE" ]; then
report_web_service_warning "Web service (Nginx or Apache) not found"
elif [ "$WEB_SERVICE" != "$(echo "$WEB_SERVICE" | head -n 1)" ]; then
setup_before_nginx_restart
- if [ ! -z "$WEB_SERVICE" ]; then
- service "$WEB_SERVICE" restart
+ if [ -n "$SERVICE_MANAGER" ]; then
+ service_command "$SERVICE_MANAGER" restart "$WEB_SERVICE"
fi
}
if ! type setup_before_nginx_restart >/dev/null 2>&1; then
setup_before_nginx_restart() { return; }
fi
+
+if [ -e /run/systemd/system ]; then
+ USING_SYSTEMD=1
+else
+ USING_SYSTEMD=0
+fi
+
+if which service >/dev/null 2>&1; then
+ USING_SERVICE=1
+else
+ USING_SERVICE=0
+fi
+
+guess_service_manager() {
+ if [ 1 = "$USING_SYSTEMD" ]; then
+ echo systemd
+ elif [ 1 = "$USING_SERVICE" ]; then
+ echo service
+ else
+ return 1
+ fi
+}
+
+list_services_systemd() {
+ test 1 = "$USING_SYSTEMD" || return
+ # Print only service names, without the `.service` suffix.
+ systemctl list-unit-files '*.service' \
+ | awk '($1 ~ /\.service/){print substr($1, 1, length($1) - 8)}'
+}
+
+list_services_service() {
+ test 1 = "$USING_SERVICE" || return
+ # Output is completely different across Debian and Red Hat.
+ # We can't really parse it.
+ service --status-all 2>/dev/null
+}
+
+service_command() {
+ local service_manager="$1"; shift
+ local command="$1"; shift
+ local service="$1"; shift
+ case "$service_manager" in
+ systemd) systemctl "$command" "$service" ;;
+ service) service "$service" "$command" ;;
+ esac
+}
+
+if ! guess_service_manager >/dev/null; then
+ echo "WARNING: Unsupported init system. Can't manage web service." >&2
+fi