J'ai écrit un programme et maintenant je dois le convertir en démon. Puisque je suis un noob et que je ne sais rien à ce sujet, pouvez-vous s'il vous plaît me dire comment puis-je le faire ou pouvez-vous me donner des tutoriels de base ou des lectures à ce sujet? Je veux vraiment savoir comment je peux le faire?
Merci à tous
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.");
}
}
Script de démarrage/arrêt du 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
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.
Êtes-vous sûr à 100% que vous devez utiliser jsvc? Si vous souhaitez simplement que votre application soit liée à un port et exécutée au démarrage, vous n'avez pas besoin de l'utiliser. jsvc permet à votre application de se lier à un port privilégié (<1024) puis de reprendre son exécution en tant qu'utilisateur normal.
Consultez la documentation Jakarta Commons Daemon . Il y a un exemple de comment implémenter l'interface Daemon
sur leur wiki . Une fois que vous avez implémenté Daemon
, vous devriez pouvoir démarrer le processus en suivant les documents "Démarrage de jsvc" et "Utilisation de jsvc" .