保持Tomcat更新的策略?

f4t66c6m  于 2022-12-13  发布在  其他
关注(0)|答案(3)|浏览(134)

我维护了许多RedHat Enterprise Linux(7个和8个)服务器(〉100个)和不同的应用程序。为了保持我的理智,我当然会使用Ansible等工具,更重要的是,我会使用公共RPM库的本地镜像副本(使用Satellite Server)。
系统会定期从这些存储库应用更新,以确保服务器的安全。
这些服务器中有一些需要安装ApacheTomcat。它必须从一个tarball手动安装。更新也是手动的(由一个Ansible角色辅助,但我仍然要意识到新版本并手动更改它)。
有没有什么策略可以让Tomcat保持最新,而不需要经常关注?

更新日期:

我找到了问题的一半解决方案。默认情况下,Tomcat将安装和示例配置混合在一个目录树中,该目录树由 Catalina _HOME标识。这使得在不破坏配置的情况下更新Tomcat变得复杂。
要解决这个问题,可以将示例特定的文件放在一个单独的目录树中,用 Catalina _BASE变量标识。

  • 下载新的压缩包。
  • 将其解压缩到新位置
  • 查看自述文件和更改日志,了解是否有任何重大更改。
  • 更新 Catalina _HOME变量以指向新位置,同时保持CATALINA_BASE变量不变。
  • 使用新 Catalina _HOME bin目录中的脚本重新启动Tomcat。

我在这里不提供代码,因为设置 Catalina _HOME和CATALINA_BASE的位置和方式会有所不同。我在启动Tomcat的服务单元文件中设置了这两个变量。
仍然开放:寻找一种方法来自动发现何时发布Tomcat的新版本。

iqjalb3h

iqjalb3h1#

经过大量的挖掘,我找到了我需要的答案。我的问题基本上有两个部分:

  • 如何在不破坏现有站点配置的情况下更新Tomcat。
  • 如何自动查找当前Tomcat版本。

如何在不破坏现有站点配置的情况下更新Tomcat

答案在于只对实际的Tomcat二进制文件使用 Catalina _HOME目录,并将配置放在由CATALINA_BASE指定的单独目录中。
Catalina _HOME目录应该只包含Tomcat tarball的内容而不做任何修改。您可以根据Tomcat文档删除某些文件,也可以添加某些共享文件,如tomcat本地库。
Catalina _BASE目录将包含/conf、/webapp、/logs和一些其他目录。
在启动Tomcat之前,请设置并导出这两个环境变量。
作为一个例子,这是我使用的systemd服务单元模板,我把它放在/etc/system/systems/tomcat@.service中

[Unit]
Description=Apache Tomcat Web Application Container for %I
After=syslog.target network.target

[Service]
Type=forking
Environment="CATALINA_HOME={{ usd_tomcat_catalina_home }}" "CATALINA_BASE={{ usd_tomcat_catalina_base }}/%i"
ExecStart=/bin/bash {{ usd_tomcat_catalina_home }}/bin/catalina.sh start
ExecStop=/bin/bash {{ usd_tomcat_catalina_home }}/bin/catalina.sh stop
SuccessExitStatus=126 143
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

有关使用 Catalina _BASE的详细说明,请访问Tomcat文档站点。
https://tomcat.apache.org/tomcat-9.0-doc/introduction.html

如何自动查找当前Tomcat版本

第二个问题是如何找到要下载的Tomcat tarball的正确版本。Apache基金会将在下一个次要版本发布时删除一个次要版本的tarball。
因此,在9.0.45发布后,以下代码立即中断并出现404错误。

wget https://mirrors.sonic.net/apache/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44.tar.gz

这个问题之前在Stackoverflow上已经得到了回答:How to get always latest link to download tomcat server using shell

TOMCAT_VER=`curl --silent http://mirror.sonic.net/apache/tomcat/tomcat-9/ | grep v9 | awk '{split($5,c,">v") ; split(c[2],d,"/") ; print d[1]}'`
wget https://mirrors.sonic.net/apache/tomcat/tomcat-9/v$TOMCAT_VER/bin/apache-tomcat-${TOMCAT_VER}.tar.gz

我发现awk的解决方案有些脆弱,因为字段编号可能会移动。对sed做同样的事情:

curl --silent http://mirror.sonic.net/apache/tomcat/tomcat-9/ | grep v9 | sed 's/.*v\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'

正则表达式寻找v + digits + . + digits + . + digits的序列,然后丢弃除数字和句点之外的所有内容。

hujrc8aj

hujrc8aj2#

[rohtash@172 blockinfile]$ cat cron.yml 
- hosts: remote1
  gather_facts: no 
  tasks:
  - name: create file in a min
    cron:
       name: "task"
       minute: "*/1"
       job: "/usr/bin/sh -c 'ansible-playbook update_pkgs.yml'"

在远程服务器上,您可以检查

[root@scp ~]# crontab -l
#Ansible: task
*/1 * * * * /usr/bin/sh -c 'ansible-playbook update_pkgs.yml'

cron模块所做的事情,它每分钟都会运行这个剧本。

- include_tasks: yum_install.yml
  when: version != {{ what_you_earlier_saved }}

您可以增加或减少您的cron作业运行计时分钟,天,小时,周任何。

what_you_earlier_saved您必须创建此变量并将其保存在如下文件中

- shell: rpm -qa|grep python3-pip-wheel > lastversion
- shell: cat lastversion
  register: what_you_earlier_saved

软件包更新后,每次您的ansible剧本都将更新此最新版本的文件。

v09wglhw

v09wglhw3#

有关新版本的更新,请加入Tomcat邮件列表tomcat-announce。“该列表用于发布Tomcat版本、安全漏洞和其他项目公告。”
https://tomcat.apache.org/lists.html#tomcat-announce

相关问题