Документация Tomcat описывает процесс компиляции и установки JSVC, который можно использовать для запуска Tomcat в качестве демона. Насколько я понимаю, у JSVC есть два преимущества:
- Он запускается как root, что позволяет использовать привилегированный порт (например, 80 или 443).
- Он создает «процесс контроллера», который будет отслеживать «контролируемый процесс» (основной поток Java) и перезапускать процесс в случае сбоя.
Я изучал systemd, включая конфигурация сервисного модуля. Основываясь на моем ограниченном понимании, systemd может выполнять те же задачи, что и JSVC, если я установил User=tomcat
(используя нужное имя пользователя) и Restart=on-failure
в моем файле конфигурации tomcat.service
.
Используя JSVC, я ожидаю, что tomcat.service
будет выглядеть примерно так:
[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
Используя systemd, я ожидаю, что tomcat.service
будет выглядеть примерно так:
[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
Я предпочитаю использовать только systemd, так как он уже есть, и я должен (должен) использовать его в любом случае. Однако я не уверен в том, упущу ли я какое-либо преимущество использования JSVC, которое я упускаю из виду.
Что можно сделать с помощью JSVC, чего нельзя сделать с помощью systemd, если я хочу запустить Tomcat в качестве демона?
Кроме того, если systemd может выполнять те же задачи, что и JSVC, а также JSVC, я также хотел бы попросить вас дать какие-либо советы по настройке, чтобы наилучшим образом реализовать преимущества JSVC, используя только systemd.