Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I have no idea where to start looking. I've been reading about daemons and didn't understand the concept.

More details :

  • I've been writing a crawler which never stops and crawlers over RSS in the internet.
  • The crawler has been written in java - therefore its a jar right now.
  • I'm an administrator on a machine that has Ubuntu 11.04 .
  • There is some chances for the machine to crash , so I'd like the crawler to run every time you startup the machine.
  • Furthermore, I'd like it to keep running even when i logged out. I'm not sure this is possible, but most of the time I'm logged out, and I still want to it crawl.

Any ideas? Can someone point me in the right direction?

Just looking for the simplest solution.

share|improve this question

3 Answers 3

up vote 15 down vote accepted

Here's a easy way to do that using SysVInit. Instructions:

  1. Create the start and the stop script of your application. Put it on some directory, in our example is:

    • Start Script: /usr/local/bin/myapp-start.sh
    • Stop Script: /usr/local/bin/myapp-stop.sh

    Each one will provide the instructions to run/stop the app. For instance the myapp-start.sh content can be as simple as the following:

    #!/bin/bash
    
    java -jar myapp.jar 
    

    For the stop script it can be something like this:

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
    
  2. Create the following script (myapp) and put it on /etc/init.d.

    /etc/init.d/myscript content:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
    
  3. Put the script to start with the system (using SysV). Just run the following command (as root):

    update-rc.d myscript defaults 
    

PS: I know that Upstart is great and bla bla, but I preffer the old SysV init system.

share|improve this answer

Yes! It is possible. :) Upstart is the way to go to make sure the service stays running. It has five packages, all installed by default:

  • Upstart init daemon and initctl utility
  • upstart-logd provides the logd daemon and job definition file for logd service
  • upstart-compat-sysv provides job definition files for the rc tasks and the reboot, runlevel, shutdown, and telinit tools that provide compatibility with SysVinit
  • startup-tasks provides job definition files for system startup tasks
  • system-services provides job definition files for tty services

The learning is very enjoyable and well worth it. Upstart has a website: http://upstart.ubuntu.com/

share|improve this answer

3 quick suggestions...

  1. Create a Start script in /etc/rc3.d (multiuser console mode) with corresponding Kill scripts in /etc/rc.0 and /etc/rc6.d to kill your Java program in a controlled way when the system powers down (runevel 0) or reboots (runlevel 6) See An introduction to Runlevels.

    You might be able to start your Java app in runlevel 2 (rc2.d) but, as a crawler, it will need TCP/IP. So make sure your networking service is available/started in your runlevel 2 beforehand. Networking is definitely up in runlevel 3.

    /etc/init.d contains all the actual start/kill scripts. /etc/rcN.d directories just contain links to them, prefixed with S or K to start or kill them respectively, per runlevel N.

  2. A process run by crond should persist between logouts. Maybe add it to your crontab.

  3. A process run with nohup should also persist. See nohup: run a command even after you logout.

    $ nohup java -jar myapp.jar &
    

    By default, myapp.jar's standard output will go to a file named ./nohup.out, or $HOME/nohup.out if the former isn't writeable.

share|improve this answer
    
And when i logout , will it still run on background? –  RanZilber Jan 29 '12 at 9:59

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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