Ubuntu – 15.04 Error updating boot sequence update-rc.d

15.04systemdupstart

I am trying to get Sickrage to auto start, and I'm hitting a wall at the command sudo update-rc.d sickrage defaults

Here is the error:

initctl: Unable to connect to Upstart: Failed to connect to socket
/com/ubuntu/upstart: Connection refused The script you are attempting
to invoke has been converted to an Upstart job, but lsb-header is not
supported for Upstart jobs. insserv: warning: script 'plexmediaserver'
missing LSB tags and overrides insserv: Default-Start undefined,
assuming empty start runlevel(s) for script plexmediaserver' insserv:
Default-Stop undefined, assuming empty stop runlevel(s) for script
plexmediaserver'

Is this because 15.04 doesn't use upstart?

How would I fix this without disabling systemd/installing upstart?

Best Answer

The plex messages are a red herring.

That's just stuff that is also wrong with your system. See questions such as Problems starting plexmediaserver on Kubuntu 15.04 for starters.

Use the systemd unit.

You don't say what list of instructions you are following in order to install SickRage on Ubuntu, but somewhere in those instructions it told you to run these commands as the superuser:

cp sickrage/init.ubuntu /etc/init.d/sickrage
chmod +x /etc/init.d/sickrage
update-rc.d sickrage defaults

These instructions are wrong for Ubuntu version 15, which as you say uses systemd not upstart. Fortunately, SickRage comes with a systemd service unit for systemd operating systems, whose installation instructions are

cp sickrage/init.systemd /etc/systemd/system/sickrage.service
systemctl preset sickrage.service

Improve upon the systemd unit that is supplied.

For what it's worth, I recommend editing that unit.

  • The program's "daemonization" is not a correct implementation of the forking readiness protocol. And what it does do is superfluous; one is already getting that for free from systemd's service management. (And upstart's as a matter of fact.)
  • The "quiet" option gets rid of something that is actually useful under systemd. It stops log output being sent to standard output. But systemd will log all of the program's standard output, and make it available in the journal and in the output of commands such as
    systemctl status sickrage.service
  • The whole PID file nonsense is entirely superfluous.

Really, this has not been tailored very well to systemd at all. But then, neither has it been tailored well to much else. The init.ubuntu supplied with SickRage for upstart-based Ubuntu isn't even an upstart job. An upstart job has only existed for just over a month. And the developers have been doing daft things like making the systemd unit file executable. (They also made the Solaris SMF manifest, an XML data file, executable in that same change, notice.)

Set your unit up like this:

[Unit]
Description=SickBeard daemon

[Service]
# Ubuntu/Debian convention:
EnvironmentFile=-/etc/default/sickbeard
User=sickbeard
Group=sickbeard
Type=simple
WorkingDirectory=/opt/sickbeard
ExecStart=/usr/bin/python SickBeard.py --nolaunch ${SB_OPTS}

[Install]
WantedBy=multi-user.target

Bonus daemontools section

For kicks, for the entertainment of any daemontools-family-using people who reach this via a WWW search, and to demonstrate the wide applicability (even to service management systems other than systemd and upstart) of following the aforegiven points on how to run under service managers, I ran that service unit through the nosh toolset's convert-systemd-units command, and hand-added a sh -c to do the shell variable expansion, to produce the following daemontools-family run script:

#!/bin/nosh
#Run file generated from ./sickbeard.service
#SickBeard daemon
chdir /opt/sickbeard
setuidgid sickbeard
read-conf --oknofile /etc/default/sickbeard
sh -c 'exec /usr/bin/python SickBeard.py --nolaunch ${SB_OPTS}'
Related Question