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
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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With