2009-01-02 3 views
7

J'ai une application Java, pour commencer, j'utiliseComment convertir une application Java existante à un service SYS V (démon)

java jar MyApp.jar

pour l'arrêter J'utilise CTRL + C.

Maintenant je dois convertir cette application à quelque chose que je peux commencer par:

/etc/init.d/myapp commencent

Et je peux arrêter avec:

/etc/init.d/myapp arrêter

Le problème i Tout sur sauver le PID du processus, je pense que j'ai vu quelque part une recette pour le faire, je ne me souviens pas où et je ne suis pas capable de le trouver.

J'ai vu qu'il y a un projet appelé Java Server Wrapper, mais je cherche quelque chose de gratuit qui ne limite pas l'utilisation de la mémoire. Et je pense que ce travail pourrait être fait dans un seul script bash.

+0

Que voulez-vous dire par "ne limite pas l'utilisation de la mémoire"? L'utilisation de la mémoire JVM de Sun est toujours limitée (si vous ne spécifiez pas -Xmx, il y a * une * valeur par défaut). – alex

+0

@alex, Peut-être que je n'ai pas bien compris cette page http://wrapper.tanukisoftware.org/doc/english/prop-java-maxmemory.html#percent –

+0

Andrea: Sun JVM a toujours une limite de mémoire. Si vous ne le définissez pas explicitement, c'est 64m. Comme 64m n'est pas beaucoup, vous avez toujours envie de changer vous-même cette valeur. Il semble que Java Service Wrapper peut définir cette limite en utilisant le pourcentage, et pas seulement la valeur absolue, comme c'est le cas habituel. –

Répondre

10

Jetez un oeil à Apache Commons Daemon.

Il dispose d'un lanceur 'jsvc' qui supporte le démarrage et l'arrêt des démons java (services).

7

Tout d'abord, sauvegarder le PID sur * nix:

$ ./yourprogram & 
$ echo $! > /var/run/yourpid 

yourpid contiendra maintenant PID yourpgram et/var/run est le bon endroit pour le mettre.

Ce qui précède peut être placé dans votre script "start". Le script "stop" peut regarder yourpid pour savoir ce qu'il faut tuer.

Si vous voulez être plus élégant et arrêter votre application correctement, vous pouvez regarder le code source de org.apache.catalina.startup.Catalina.java de Tomcat sur la façon d'implémenter des hooks d'arrêt appropriés.

En second lieu, au-dessus "stop" et des scripts "start" peuvent alors être mis en /etc/init.d/mystopstartscript:

#!/bin/bash 
# processname: yourprogram 
# pidfile: /var/run/yourpid 

case $1 in 
start) 
     sh /some/where/start.sh 
     ;; 
stop) 
     sh /some/where/stop.sh 
     ;; 
restart) 
     sh /some/where/stop.sh 
     sh /some/where/start.sh 
     ;; 
esac 
exit 0 

Ceci est une solution assez développée à la maison, avec des idées, provenant en bon 'ol Tomcat, mais j'espère que ça aide :)

Questions connexes