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.

7 Answers 7


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:

    java -jar myapp.jar 

    For the stop script it can be something like this:

    # 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 (myscript) and put it on /etc/init.d.

    /etc/init.d/myscript content:

    # MyApp
    # description: bla bla
    case $1 in
            /bin/bash /usr/local/bin/myapp-start.sh
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
    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.

  • 1
    But how do the system will know what parameter will use? How to set to be the "start". Tried here and it did not work. Mar 19, 2015 at 20:05
  • 1
    This works, but the command "service myapp start" do not exit the command.
    – Tobia
    Jun 22, 2015 at 8:46
  • Now how to use the start|stop|restart options in myscript ?
    – Codevalley
    Jul 29, 2015 at 10:21
  • 1
    Also, even after doing the 3 steps, my jar is not running on startup. Are you sure if we have to change permissions, or path or something like that?
    – Codevalley
    Jul 29, 2015 at 10:26
  • 2
    This worked for me, thank you. But I had to make the last script ('myscipt' in your example) executable with this command: chmod 755 /etc/init.d/myscript . Otherwise update-rc.d command couldn't execute it.
    – er-han
    Mar 4, 2017 at 17:51

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/

  • 1
    From the Upstart website, as of 2019: "Project is in maintaince mode only. No new features are being developed and the general advice would be to move over to another minimal init system or systemd"
    – Nav
    Jan 23, 2019 at 11:47

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.

  • And when i logout , will it still run on background?
    – RanZilber
    Jan 29, 2012 at 9:59

Also be aware when making aplications with:

  update-rc.d myscript defaults 

To have permissions 0755 and to use or get before your .sh the path. Let's say your script is on /root/test.sh , you should first change to CD /root/ before accessing test.sh.

So best way is to make a SH on init.d and there change the path to your sh and execute it in the start function.


Simple startup scripts with Java version checking for Linux auth-agent and Windows auth-agent.bat


The easiest way is to use supervisord. Please see full details at http://supervisord.org/

You can also view more details here:

Running an executable jar file when the system starts



I prefer systemd service and this is a sample for Quarkus application startup service and this is like any java application.

  1. go to /etc/systemd/system

  2. create Quarkus.service file

  3. fill the file like this example.

Description=Quarkus Application
Wants=syslog.target network.target remote-fs.target
ExecStart=/usr/lib/jvm/java-11-openjdk/bin/java -jar /path/to/jar file/target/quarkus-app/quarkus-run.jar
ExecStop=/bin/kill -15 $MAINPID
Type = simple
  1. type systemctl daemon-reload
  2. systemctl enable quarkus.service
  3. systemctl start quarkus.service


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.