Quel avantage puis-je tirer de JSVC si je me contente d'utiliser systemd?
La documentation Tomcat décrit le processus de compilation et d'installation JSVC qui peut être utilisé pour exécuter Tomcat en tant que démon. D'après ce que j'ai compris, le JSVC présente deux avantages:
- il se lance comme root permettant l'utilisation d'un port privilégié (comme 80 ou 443).
- il crée un "controller process" qui va surveiller un "controller process" (le thread Java principal) et redémarrer le processus sur échec.
j'ai été en apprentissage systemd, y compris le configuration de l'Unité de service. Basé sur ma compréhension limitée, systemd est capable d'effectuer les mêmes tâches que JSVC si je mets User=tomcat
(en utilisant le nom d'utilisateur désiré) et Restart=on-failure
dans mon tomcat.service
fichier de configuration.
en utilisant JSVC, je l'espère tomcat.service
à ressembler à quelque chose comme ceci:
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Environment=CATALINA_PID=/var/run/tomcat.pid
Environment=JAVA_HOME=/path/to/java
Environment=CATALINA_HOME=/opt/tomcat
...
ExecStart=/opt/tomcat/bin/jsvc
-Dcatalina.home=${CATALINA_HOME}
-user tomcat
-java-home ${JAVA_HOME}
-pidfile ${CATALINA_PID}
...
org.apache.catalina.startup.Bootstrap
ExecStop=/opt/tomcat/bin/jsvc
-pidfile ${CATALINA_PID}
...
-stop
org.apache.catalina.startup.Bootstrap
[Install]
WantedBy=multi-user.target
en utilisant systemd, je l'espère tomcat.service
à ressembler à quelque chose comme ceci:
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Type=forking
PIDFile=/var/run/tomcat.pid
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/path/to/java
Environment=CATALINA_HOME=/opt/tomcat
...
Restart=on-failure
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
Ma préférence est d'utiliser juste systemd car il est déjà là et je dois (devrais) l'utiliser de toute façon. Je ne suis toutefois pas certain de savoir si oui ou non je vais manquer tout avantage de l'utilisation de JSVC que je passe sous silence.
que peut-on faire avec JSVC qui ne peut pas être fait avec systemd si je veux lancer Tomcat en tant que démon?
aussi, si systemd est capable d'effectuer les mêmes tâches que JSVC comme en plus de JSVC, j'aimerais également vous demander des conseils de configuration que vous pourriez offrir pour réaliser au mieux les avantages de JSVC en utilisant just systemd.
3 réponses
En général, la plupart des fonctionnalités fournies par jsvc est fourni par systemd, à l'exception de l'ouverture de ports privilégiés (voir ci-dessous). Si possible, c'est une très bonne idée de passer directement à la fonctionnalité systemd, car les choses deviennent plus simples et plus efficaces.
Votre fichier unité semble correct, à l'exception de
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
cette partie ressemble à un autre papier d'emballage qui peut être remplacé par un
java -jar ...
.
Ouverture sockets privilégiés
sous Systemd, cela se fait généralement par activation de socket. Systemd ouvre la socket et la remet au démon en tant que descripteur de fichier ouvert (comme stdin, stdout, stderr).
le démon peut alors être lancé comme utilisateur non privilégié, et ne supprime pas les privilèges lui-même. Le démon doit supporter cela, et au lieu d'ouvrir le socket par lui-même, il devrait utiliser celui qui lui a été donné. Sous Java, cela est rendu très problématique par le manque de support dans le Java stdlib.
AFAIK, tomcat ne supporte pas l'activation de socket, donc si vous voulez utiliser un port privilégié et exécuter le démon sous un utilisateur non privilégié, jsvc peut encore être nécessaire.
à ce point, j'utiliserais JSvc. Mais emballe-le avec un script Systemd si je le devais.
gardez à l'esprit que JSvc est juste un autre exécutable. Ainsi, un utilisateur de système régulier peut configurer un service JSvc par exemple. Il est sûr de dire que sur la plupart des distros Systemd nécessite des privilèges root pour être configuré.
j'ai aussi écrit des programmes Java qui utilisent JSvc et ProcRun.exe en enveloppant une petite interface Java. Cela me permet d'utiliser le même service tests d'intégration de code et même de JUnit sur les logiciels Unix et Windows. Donc je dirais JSvc et ProcRun.exe ensemble de faciliter la croix-plate-forme de service code.
JSvc a quelques options intéressantes spécifiques à Java qui peuvent vous être utiles. Par exemple, comment démarrer la co-entreprise ( processus ou DLL), etc. Vous pouvez en écrire beaucoup dans un script Systemd, mais je pense que vous pourriez réécrire JSvc à Bash à ce moment-là.
alors peut-être que ce n'est pas très convaincant pour votre exemple Tomcat spécifique. Mais il y a quelques avantages à utiliser la minuscule enveloppe de service JSvc par rapport à Systemd.
vous devez utiliser jsvc si vous voulez lancer tomcat avec des privilèges non-root mais en utilisant le port Bas(<1024).
désactiver le port d'arrêt d'urgence devient disponible. Il ne peut pas être utilisé lors de L'exécution de Tomcat avec les scripts shell standard, car il empêchera shutdown.bat/.sh et catalina.bat/.sh de l'arrêter avec grâce.