Table of Contents
Systemd
Modern Linux systems have been updated to use the new systemd standard. The method is very simple and involves creating a service file then enabling it.
Create the service file
Be sure to modify the user, group, mono path and install directory.
Like this :
Create Lidarr user and group, eg:
useradd -s /bin/false -d /var/lib/lidarr/ -r -m -U lidarr
Change owner and permissions for lidarr application files:
chown -R lidarr:lidarr /opt/Lidarr
chmod -R a=,a+X,u+rw,g+r /opt/Lidarr
Create the file lidarr.service with the content:
[Unit]
Description=Lidarr Daemon
After=network.target
[Service]
User={User account for Lidarr}
Group={Group account for Lidarr}
Type=simple
ExecStart=/usr/bin/mono /opt/Lidarr/Lidarr.exe -nobrowser
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Install the file to your system directory
Typically located in /etc/systemd/system/
, verify before proceeding. Will differ based on distribution.
sudo install -m 644 lidarr.service /etc/systemd/system/
Add Lidarr to startup
systemctl enable lidarr.service
Start Lidarr service
Start Lidarr via systemd and verify status.
systemctl start lidarr.service
systemctl status lidarr.service
Lidarr should be available on port 8686, for example: http://localhost:8686
Init.d Script (Debian/Ubuntu)
Create and edit the Lidarr init.d script below
sudo nano /etc/init.d/lidarr
Paste the following, changing applicable variables
#! /bin/sh
### BEGIN INIT INFO
# Provides: Lidarr
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Should-Start: $NetworkManager
# Should-Stop: $NetworkManager
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts instance of Lidarr
# Description: starts instance of Lidarr using start-stop-daemon
### END INIT INFO
############### EDIT ME ##################
# path to app
APP_PATH=/opt/Lidarr
# user
RUN_AS=lidarr
# path to mono bin
DAEMON=$(which mono)
# Path to store PID file
PID_FILE=/var/run/lidarr/lidarr.pid
PID_PATH=$(dirname $PID_FILE)
# script name
NAME=lidarr
# app name
DESC=Lidarr
# startup args
EXENAME="Lidarr.exe"
DAEMON_OPTS=" "$EXENAME
############### END EDIT ME ##################
LIDARR_PID=`ps auxf | grep Lidarr.exe | grep -v grep | awk '{print $2}'`
test -x $DAEMON || exit 0
set -e
#Look for PID and create if doesn't exist
if [ ! -d $PID_PATH ]; then
mkdir -p $PID_PATH
chown $RUN_AS $PID_PATH
fi
if [ ! -d $DATA_DIR ]; then
mkdir -p $DATA_DIR
chown $RUN_AS $DATA_DIR
fi
if [ -e $PID_FILE ]; then
PID=`cat $PID_FILE`
if ! kill -0 $PID > /dev/null 2>&1; then
echo "Removing stale $PID_FILE"
rm $PID_FILE
fi
fi
echo $LIDARR_PID > $PID_FILE
case "$1" in
start)
if [ -z "${LIDARR_PID}" ]; then
echo "Starting $DESC"
rm -rf $PID_PATH || return 1
install -d --mode=0755 -o $RUN_AS $PID_PATH || return 1
start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE --exec $DAEMON -- $DAEMON_OPTS
else
echo "Lidarr already running."
fi
;;
stop)
echo "Stopping $DESC"
echo $LIDARR_PID > $PID_FILE
start-stop-daemon --stop --pidfile $PID_FILE --retry 15
;;
restart|force-reload)
echo "Restarting $DESC"
start-stop-daemon --stop --pidfile $PID_FILE --retry 15
start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE --exec $DAEMON -- $DAEMON_OPTS
;;
status)
# Use LSB function library if it exists
if [ -f /lib/lsb/init-functions ]; then
. /lib/lsb/init-functions
if [ -e $PID_FILE ]; then
status_of_proc -p $PID_FILE "$DAEMON" "$NAME" && exit 0 || exit $?
else
log_daemon_msg "$NAME is not running"
exit 3
fi
else
# Use basic functions
if [ -e $PID_FILE ]; then
PID=`cat $PID_FILE`
if kill -0 $PID > /dev/null 2>&1; then
echo " * $NAME is running"
exit 0
fi
else
echo " * $NAME is not running"
exit 3
fi
fi
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0