mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-08 23:00:51 +02:00
systemd-run(1) runs `systemctl restart` in an isolated systemd unit that is not subject to process termination as jellyfin.service is shut down. We adjust the sudoers configuration for this new usage, removing the old config, since restart.sh is the only user of the sudoers policy. Additionally we change `systemctl start` to `systemctl restart` since there was a race condition where jellyfin.service was not fully stopped by the time this ran, so `systemctl start` became a noop. `systemctl restart` on the other hand works whether jellyfin.service is stopped or not. The at(1) hack (and the usage of `start` instead of `restart`) is left in for other init systems since I cannot test on those systems, and because I don't know of any systemd-run(1) equivalent (although it may be a non-issue since alternate init systems do not keep track of daemon children nearly as aggressively as systemd does).
57 lines
1.8 KiB
Bash
Executable file
57 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# restart.sh - Jellyfin server restart script
|
|
# Part of the Jellyfin project (https://github.com/jellyfin)
|
|
#
|
|
# This script restarts the Jellyfin daemon on Linux when using
|
|
# the Restart button on the admin dashboard. It supports the
|
|
# systemctl, service, and traditional /etc/init.d (sysv) restart
|
|
# methods, chosen automatically by which one is found first (in
|
|
# that order).
|
|
#
|
|
# This script is used by the Debian/Ubuntu/Fedora/CentOS packages.
|
|
|
|
# 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
|
|
fi
|
|
fi
|
|
|
|
if type sudo >/dev/null 2>&1; then
|
|
sudo_command=sudo
|
|
else
|
|
sudo_command=
|
|
fi
|
|
|
|
echo "Detected service control platform '$cmd'; using it to restart Jellyfin..."
|
|
case $cmd in
|
|
'systemctl')
|
|
# Without systemd-run here, `jellyfin.service`'s shutdown terminates this process too
|
|
$sudo_command systemd-run --scope systemctl restart jellyfin
|
|
;;
|
|
'service')
|
|
echo "sleep 0.5; $sudo_command service jellyfin start" | at now
|
|
;;
|
|
'sysv')
|
|
echo "sleep 0.5; /usr/bin/sudo /etc/init.d/jellyfin start" | at now
|
|
;;
|
|
esac
|
|
exit 0
|