prunsrv procrun manager example commons java daemon jsvc

procrun - ¿Cómo convertir un programa java a daemon con jsvc?



procrun example (3)

¿Estás 100% seguro de que necesitas usar jsvc? Si solo desea que su aplicación se vincule a un puerto y se ejecute en el momento del arranque, no necesita usarla. jsvc permite que su aplicación se vincule a un puerto privilegiado (<1024) y luego reanude la ejecución como un usuario normal.

Escribí un programa y ahora se espera que lo convierta en un daemon. Como soy novato y no sé nada al respecto, ¿pueden decirme cómo puedo hacerlo o me pueden dar tutoriales básicos o lecturas al respecto? Realmente quiero aprender cómo puedo hacerlo?

Gracias a todos


Clase de Java:

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."); } }

Script de inicio / detención de Shell:

#!/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

Y el efecto:

$ ./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.