Tomcat 文档描述了编译和安装JSVC的过程,该过程可用于将 Tomcat 作为守护程序运行。据我了解,JSVC 有两个好处:
- 它以 root 身份启动,允许使用特权端口(如 80 或 443)。
- 它创建一个“控制器进程”,它将监视一个“受控进程”(主 Java 线程)并在失败时重新启动该进程。
我一直在学习systemd,包括服务单元配置。根据我有限的理解,如果我在我的配置文件中设置User=tomcat
(使用所需的用户名) ,systemd 能够执行与 JSVC 相同的任务。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 的任何好处。
如果我想将 Tomcat 作为守护进程运行,JSVC 可以实现哪些 systemd 无法实现的功能?
此外,如果 systemd 能够执行与 JSVC 和 JSVC 相同的任务,我还想询问您可能提供的任何配置技巧,以最好地使用 systemd 来实现 JSVC 的好处。