Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert a java program to daemon with jsvc?

Tags:

java

daemon

jsvc

I wrote a program and now I am expected to convert it to a daemon. Since I am a noob and dont know anything about it, can you please tell me how can I do it or can you please give me basic tutorials or readings about it ? I really want to learn how I can do it ?

Thank you all

like image 323
Ozer Avatar asked Oct 07 '11 12:10

Ozer


People also ask

How jsvc works?

How jsvc works. Jsvc uses 3 processes: a launcher process, a controller process and a controlled process. The controlled process is also the main java thread, if the JVM crashes the controller will restart it in the next minute.

How do you use Commons Daemon?

There are two ways to use Commons Daemon: by implementing the daemon interface or by calling a class that provides the required methods for daemon. For example, Tomcat-4.1. x uses the daemon interface and Tomcat-5.0. x provides a class whose methods are called by JSVC directly.

What is JSVC in Linux?

Jsvc is a set of libraries and applications that facilitates running Java applications on Linux, UNIX, and similar operating systems. Using Jsvc with Red Hat JBoss Web Server 3 allows Tomcat to switch identities. Using Jsvc, Tomcat can perform root-level operations and then revert to a non-privileged user.


1 Answers

Java class:

package example;  import java.util.Date; import java.util.Timer; import java.util.TimerTask; import org.apache.commons.daemon.*;  class EchoTask extends TimerTask {     @Override     public void run() {         System.out.println(new Date() + " running ...");     } }  public class Main implements Daemon {      private static Timer timer = null;      public static void main(String[] args) {         timer = new Timer();         timer.schedule(new EchoTask(), 0, 1000);     }      @Override     public void init(DaemonContext dc) throws DaemonInitException, Exception {         System.out.println("initializing ...");     }      @Override     public void start() throws Exception {         System.out.println("starting ...");         main(null);     }      @Override     public void stop() throws Exception {         System.out.println("stopping ...");         if (timer != null) {             timer.cancel();         }     }      @Override     public void destroy() {         System.out.println("done.");     }   } 

Shell start/stop script:

#!/bin/sh  # Setup variables EXEC=/usr/bin/jsvc JAVA_HOME=/usr/lib/jvm/java-6-sun CLASS_PATH="/usr/share/java/commons-daemon.jar":"/path/to/your.jar" CLASS=example.Main USER=foo PID=/tmp/example.pid LOG_OUT=/tmp/example.out LOG_ERR=/tmp/example.err  do_exec() {     $EXEC -home "$JAVA_HOME" -cp $CLASS_PATH -user $USER -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS }  case "$1" in     start)         do_exec             ;;     stop)         do_exec "-stop"             ;;     restart)         if [ -f "$PID" ]; then             do_exec "-stop"             do_exec         else             echo "service not running, will do nothing"             exit 1         fi             ;;     *)             echo "usage: daemon {start|stop|restart}" >&2             exit 3             ;; esac 

And the effect:

$ ./service start && sleep 5 && ./service stop $ cat /tmp/example.out initializing ... starting ... Fri Oct 07 16:26:54 EEST 2011 running ... Fri Oct 07 16:26:55 EEST 2011 running ... Fri Oct 07 16:26:56 EEST 2011 running ... Fri Oct 07 16:26:57 EEST 2011 running ... Fri Oct 07 16:26:58 EEST 2011 running ... stopping ... done. 
like image 144
barti_ddu Avatar answered Sep 25 '22 15:09

barti_ddu