3

I Have this init.d script which I am trying to get to startup with ubuntu however it wont run at startup. It does work when i type "sudo /etc/init.d/couchpotato start" though. Any ideas on how to get it starting at boot?

#! /bin/sh

### BEGIN INIT INFO
# Provides:          CouchPotato application instance
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts instance of CouchPotato
# Description:       starts instance of CouchPotato using start-stop-daemon
### END INIT INFO

############### EDIT ME ##################
# path to app
APP_PATH=/usr/local/sbin/couchpotato

# path to python bin
DAEMON=/usr/bin/python

# startup args
DAEMON_OPTS=" CouchPotato.py -q"

# script name
NAME=couchpotato

# app name
DESC=CouchPotato

# user
RUN_AS=root

PID_FILE=/var/run/couchpotato.pid

############### END EDIT ME ##################

test -x $DAEMON || exit 0

set -e

case "$1" in
  start)
        echo "Starting $DESC"
        start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE  --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
        ;;
  stop)
        echo "Stopping $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE
        sleep 15
        start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE  --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

6 Answers 6

8

You can try to run this in terminal:

sudo chmod 755 /etc/init.d/couchpotato

sudo update-rc.d couchpotato defaults

================================

And when you want to disable it from running at startup:

sudo update-rc.d -f couchpotato remove

To find out more information do:

man update-rc.d

2
  • I've already chmod-ed it with a+x and update-rc.d. I get "System start/stop links for /etc/init.d/couchpotato already exist."
    – Will
    Oct 27, 2010 at 13:08
  • No luck for me with this suggestion...
    – Pitto
    Jan 2, 2011 at 21:26
2

You might try to use the insserv command. From the "man insserv" command on a 10.10 installation, I can read:

insserv - Enable an installed system init script.
4
  • Ah Brilliant. That did the trick...
    – Will
    Oct 27, 2010 at 14:15
  • 2
    how? just running sudo insserv?
    – Pitto
    Jan 2, 2011 at 20:54
  • I get the "insserv: warning: script 'K20acpi-support' missing LSB tags and overrides The script you are attempting to invoke has been converted to an Upstart job, but lsb-header is not supported for Upstart jobs" Error :(
    – Pitto
    Jan 3, 2011 at 9:07
  • 2
    Yes, this answer needs more details. From man insserv: "insserv is a low level tool used by update-rc.d… It is not recommended to execute insserv directly… update-rc.d is the recommended interface for managing init scripts." The other answer suggesting sudo update-rc.d couchpotato defaults seems preferable.
    – Sparhawk
    Jul 17, 2014 at 10:34
2

I never could get the supplied init.d script to work. I could run it just fine, but init.d would start couchpotato, but I could never connect to it. I went ahead and created my own dirty script for it. This should work assuming you use the path ~/.couchpotato for your installdir.

### BEGIN INIT INFO
# Provides:          CouchPotato application instance
# 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 CouchPotato
# Description:       starts instance of CouchPotato using start-stop-daemon

### END INIT INFO

USER="youruser"

case "$1" in

  start)
        echo "Starting $DESC"
        /home/micdawg/.couchpotato/CouchPotato.py &
        ;;
  stop)
        echo "Stopping $DESC" 
        PID=`ps -ef | grep CouchPotato.py | grep -v grep | awk '{print $2}'`
        kill -9 $PID 
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        PID=`ps -ef | grep CouchPotato.py | grep -v grep | awk '{print $2}'`
        kill -9 $PID 
        sleep 15
        /home/micdawg/.couchpotato/CouchPotato.py &
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
exit 0
1

from the man: runlevel information in the init.d script LSB comment header is used (..) Such header is required to be present in init.d scripts. See the insserv( manual page for details about the LSB header format.

Example:

### BEGIN INIT INFO
# Provides: apache2
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start/stop apache2 web server
### END INIT INFO 
1

The accepted answer assumes that "upstart" is being used to start processes when the system boots. This is not always so. I am using Ubuntu 9.04 Minimal running on a virtual private server and this does not use upstart.

In this case, in order for the system to notice and run the scripts in /etc/init.d you need to run update-rc.d which created symbolic links to your inet.d script in places where the system will look for instructions when it boots up.

Something like this:

update-rc.d couchpotato defaults 92

The 92 is a sensible value for the priority, delaying the startup of your script until other important stuff is running.

Here are more details about running update-rc.d

1
  • Yesss, thank you so much! I'm not sure about whatever couchpotato is (maybe just an example?) but for my setup, this seemed necessary to make Zoneminder work ... its default rc.d setting of 20 was too low [high priority] for it to start up correctly. Oct 7, 2014 at 5:45
1

If you are not getting any clue why your service is not getting started on boot. However it gets started perfectly fine when you try to start it manually with command service <your service> start. Then try redirecting standard output and error output to some file. Which may give you some clue why it is not getting started

e.g. inside your script

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

exit 0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .