6 Autostart on Linux
Ruth Harris edited this page 2019-07-04 18:58:07 -04:00

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