热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

只使用systemd,我从JSVC获得了什么好处?

如何解决《只使用systemd,我从JSVC获得了什么好处?》经验,为你挑选了2个好方法。

Tomcat文档描述了编译和安装JSVC的过程,该过程可用于将Tomcat作为守护进程运行.据我了解,JSVC有两个好处:

    它以root身份启动,允许使用特权端口(如80或443).

    它创建了一个"控制器进程",它将监视"受控进程"(主Java线程)并在失败时重新启动进程.

我一直在学习systemd,包括服务单元配置.根据我的有限理解,如果我设置User=tomcat(使用所需的用户名)并Restart=on-failure在我的tomcat.service配置文件中,systemd能够执行与JSVC相同的任务.

使用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的好处.



1> zbyszek..:

通常,jsvc提供的大多数功能都是由systemd提供的,但打开特权端口除外(见下文).如果可能的话,切换到直接使用systemd功能是一个非常好的主意,因为事情变得更简单,更有效.

你的单元文件看起来很好,但是除了

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

这部分看起来像另一个可以用直接替换的包装器 java -jar ....

打开特权套接字

在Systemd下,这通常通过套接字激活来完成.Systemd打开套接字并将其作为打开的文件描述符(如stdin,stdout,stderr)传递给守护进程.

然后,守护程序可以作为非特权用户启动,并且不会自行删除权限.守护进程必须支持这个,而不是单独打开套接字,它应该使用它给出的那个.在Java下,由于缺乏对Java stdlib的支持,这很成问题.

AFAIK,tomcat不支持套接字激活,因此如果您想使用特权端口并在非特权用户下运行守护程序,则可能仍需要jsvc.


我最终使用`catalalina.sh run`,它将在当前窗口中运行,并且仍然执行运行jar所需的所有设置
@MarkGibson:我认为这篇文章已经移动了,我在[这里]找到了(https://jdebp.eu/FGA/systemd-house-of-horror/tomcat.html)

2> kervin..:

此时,我将使用JSvc.但如果必须的话,用Systemd脚本包装它.

    请记住,JSvc只是另一个可执行文件.因此,常规系统用户可以配置JSvc服务.可以肯定地说,在大多数发行版上,Systemd需要配置root权限.

    我还编写了Java程序,它通过包装一个小的Java接口来使用JSvc和ProcRun.exe.这允许我在Unix和Windows操作系统上使用相同的服务代码甚至JUnit集成测试.所以我认为JSvc和ProcRun.exe一起促进跨平台服务代码.

    JSvc有一些有趣的Java特定选项,可能对您有用.比如如何启动JVM(进程或DLL)等.你可以将很多这些写入Systemd脚本,但我怀疑你只是在那时用Bash重写JSvc.

因此,对于您的特定Tomcat示例,它可能并不十分引人注目.但是在Systemd上使用微小的JSvc服务包装器有一些优点.


推荐阅读
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • ElasticSearch成功安装完毕。 测试数据添加出现{  error:{    root_cause ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • centos7+cdh5.10.0搭建
    一、选择环境:1.说明本次部署使用台机器,3台用于搭建CDH集群,1台为内部源。内部源机器是可以连接公网的,可以提前部署好内部源,本次部署涉及到的服务器的hosts配置如下:192.168 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 我正在使用sql-serverkafka-connect和debezium监视sqlserver数据库,但是当我发布并运行我的wo ... [详细]
  • https:www.kernel.org这里从3.10升级到指定版本4.9.39[root@docker-dev~]#yumgroupi ... [详细]
author-avatar
夜沙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有