Browse Source

Fix restart.sh to look at what's actually booted

The old code was wrong because e.g. systemd can be *installed* on the
system, but not actually used as PID1. In that case we would pick
`systemctl`, but it wouldn't actually work because PID1 was some other
init system.
AJ Jordan 4 years ago
parent
commit
a4e1732e35
2 changed files with 42 additions and 16 deletions
  1. 21 8
      debian/bin/restart.sh
  2. 21 8
      fedora/restart.sh

+ 21 - 8
debian/bin/restart.sh

@@ -11,16 +11,29 @@
 #
 # This script is used by the Debian/Ubuntu/Fedora/CentOS packages.
 
-get_service_command() {
-    for command in systemctl service; do
-        if which $command &>/dev/null; then
-            echo $command && return
+# This is the Right Way(tm) to check if we are booted with
+# systemd, according to sd_booted(3)
+if [ -d /run/systemd/system ]; then
+    cmd=systemctl
+else
+    # Everything else is really hard to figure out, so we just use
+    # service(8) if it's available - that works with most init
+    # systems/distributions I know of, including FreeBSD
+    if type service >/dev/null 2>&1; then
+        cmd=service
+    else
+        # If even service(8) isn't available, we just try /etc/init.d
+        # and hope for the best
+        if [ -d /etc/init.d ]; then
+            cmd=sysv
+        else
+            echo "Unable to detect a way to restart Jellyfin; bailing out" 1>&2
+            echo "Please report this bug to https://github.com/jellyfin/jellyfin/issues" 1>&2
+            exit 1
         fi
-    done
-    echo "sysv"
-}
+    fi
+fi
 
-cmd="$( get_service_command )"
 echo "Detected service control platform '$cmd'; using it to restart Jellyfin..."
 case $cmd in
     'systemctl')

+ 21 - 8
fedora/restart.sh

@@ -11,16 +11,29 @@
 #
 # This script is used by the Debian/Ubuntu/Fedora/CentOS packages.
 
-get_service_command() {
-    for command in systemctl service; do
-        if which $command &>/dev/null; then
-            echo $command && return
+# This is the Right Way(tm) to check if we are booted with
+# systemd, according to sd_booted(3)
+if [ -d /run/systemd/system ]; then
+    cmd=systemctl
+else
+    # Everything else is really hard to figure out, so we just use
+    # service(8) if it's available - that works with most init
+    # systems/distributions I know of, including FreeBSD
+    if type service >/dev/null 2>&1; then
+        cmd=service
+    else
+        # If even service(8) isn't available, we just try /etc/init.d
+        # and hope for the best
+        if [ -d /etc/init.d ]; then
+            cmd=sysv
+        else
+            echo "Unable to detect a way to restart Jellyfin; bailing out" 1>&2
+            echo "Please report this bug to https://github.com/jellyfin/jellyfin/issues" 1>&2
+            exit 1
         fi
-    done
-    echo "sysv"
-}
+    fi
+fi
 
-cmd="$( get_service_command )"
 echo "Detected service control platform '$cmd'; using it to restart Jellyfin..."
 case $cmd in
     'systemctl')