34 votes

Comment faire pour convertir un programme java de démon avec jsvc?

J'ai écrit un programme et maintenant, je suis attendu pour le convertir en un démon. Depuis que je suis un noob et ne savez rien à ce sujet, pouvez-vous svp me dire comment puis-je le faire ou pouvez-vous svp me donner des tutoriels ou des lectures à ce sujet ? J'ai vraiment envie de savoir comment je peux faire ?

Merci à vous tous

68voto

barti_ddu Points 5423

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

 }

Shell de démarrage/arrêt du 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

Et l'effet:

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

4voto

lynks Points 3248

Êtes-vous sûr à 100%, vous devez utiliser jsvc? Si vous voulez juste pour se lier à un port et d'exécuter au démarrage, vous n'avez pas besoin de l'utiliser. jsvc permet à votre application de lier à un port privilégié (<1024) et ensuite reprendre l'exécution en tant qu'utilisateur normal.

3voto

jtoberon Points 3928

Découvrez le Jakarta Commons Démon de la documentation. Il y a un exemple de la façon de mettre en œuvre l' Daemon interface sur leur wiki. Une fois que vous avez mis en oeuvre Daemon, vous devriez être en mesure de commencer le processus en suivant le "Départ jsvc" et "à l'Aide de jsvc" docs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X