I have a server ClueReleaseManager which I have installed on a Ubuntu 12.04 system from a separate user (named pypi), and I want to be able to start this server at startup.

I already have tried to create a simple bash script with some commands (login as user pypi, use a virtual python environment, start the server), but this does not work properly. Either the terminal crashes or when I try to ask the status of the service it is started and I am logged in as user pypi ...?

So, here the question: What are the steps to take to make sure the ClueReleaseManager service properly starts up on boot time, and which I can control (start/stop/..) during runtime, while the service is running from a user pypi?

Additional information and constraints:

  • I want to do this as simple as possible
  • Without any other packages/programs to be installed
  • I am not familiar with the Ubuntu 12.04 init structure
  • All the information I found on the web is very sparse, confusing, incorrect or does not apply to my case of running a service as a different user from root.

A basic script to start a service could look like this:


# This is for the 'update-rc.d', so it knows when to start your service.
# Provides:          your-script
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: a short description
# Description:       a long description

COMMAND="echo -n 'I am: '; whoami"

log () {
    echo "$@"
    logger -p user.info -t "ClueReleaseManager [$$]" "$@"

main () {
    case "$1" in
        # stop your service
            echo "Stopping"
            # run your service as user pypi
            # doesn't need password as root
            echo "Starting"
            # you probably want to start it in background
            # (don't block the other services)
            (su - pypi -c "$COMMAND") &
        # restart your service
            echo "Restarting"
        # wrong command
            echo "Unknown command: '$1'"

# If you want, you can even log the whole.
# Unless you changed it it should go to /var/log/syslog
main "$1" 2>&1 | log

# Better exit with success, not sure if this can screw up Ubuntus boot process.
exit 0

update-rc.d how-to: Put it in /etc/init.d/your-script (or link to it). Make executable, and add to init services:

$ sudo chmod +x /etc/init.d/your-script
$ sudo update-rc.d your-script defaults

Now you can start and stop your service:

$ sudo your-script start
$ sudo your-script stop

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.