Shellの基礎知識(実践編)

【RHEL系Linux】Tomcatを自動インストール・設定するスクリプトの作成と活用法

Tomcatは、JavaベースのWebアプリケーションサーバーで、特に中小規模のWebアプリケーションやサービスの実行に広く使用されています。大規模な環境では、Ansibleのようなツールを使って自動化するのが一般的ですが、私のような小規模の開発環境では、Ansibleを使用する必要もなく、手動で設定作業を行うことが多いです。そのため、開発環境の構築や設定を行う際、手間や時間が多くかかり、効率的に作業を進めることができません。

そのため、Tomcatのインストールと設定を自動化するスクリプトを作成しました。小規模な開発環境でも、Tomcatのインストール作業がスムーズに進み、設定ファイルや環境設定を簡単に適用できるようになります。また、インストール後の確認作業やサービスの登録もスクリプトで自動化されるため、管理者の負担を大幅に軽減できます。

この記事では、Tomcat自動設定スクリプトの作成手順、実行方法、そして実際の利用シーンについて解説します。これにより、開発環境の構築が効率的に行え、サーバー管理の負担も軽減されます。

運用自動化ツール

🟡 運用自動化ツール
📌 面倒な作業を一括効率化!シェルスクリプトで実現する運用自動化術
├─ 基本共通
| ├─【Shellの基礎知識】簡単なログ出力ロジックを作ってみました。
| ├─【Shellの基礎知識】シェルスクリプトの作成を時短!テンプレートで効率化する方法
| ├─【Shellの基礎知識】共通関数定義クラスの完全ガイド!設計から実践まで徹底解説
├─ 開発環境構築
| ├─【RHEL系Linux】開発サーバー初期設定スクリプトの完全自動化
| ├─【RHEL系Linux】Apache+Let's Encrypt 自動構築スクリプト|バーチャルホスト対応
| ├─【RHEL系Linux】Tomcatを自動インストール・設定するスクリプトの作成と活用法
| └─【RHEL系Linux】PostgreSQLを自動インストールするシェルスクリプトの使い方
└─ 運用・保守
  ├─【RHEL系Linux】任意サービスを簡単制御!汎用サービススクリプトの活用術
  ├─【RHEL系Linux】ファイルやログを自動圧縮する汎用スクリプトの実装と活用法
  ├─【RHEL系Linux】リソース(CPU・MEM)監視スクリプトで使用率・異常を検知する仕組み
  ├─【RHEL系Linux】中間ファイル連携を完全制御するファイル転送スクリプト
  ├─【RHEL系Linux】信頼性を重視した完了保証型ディレクトリ転送スクリプトの設計と実装
  ├─【RHEL系Linux】ディスク使用率を自動監視するシェルスクリプトの実装
  └─【RHEL系Linux】サーバーの障害検知と自動通知|systemdログ監視の実装例

Tomcat自動設定スクリプトの概要と役割

プロダクトを開発するために必要なのが開発環境です。しかし、開発環境を構築するには手動での作業が多く、時間や手間がかかります。特に、複数のサーバーで同じ設定を繰り返し行う場合や、開発環境が頻繁に変更される場合、手動で行う作業は非常に非効率です。今回は、開発中のJavaプロダクトの開発環境を何度も構築し直す必要がなくなるように、Tomcatのインストールと設定を自動化しました。このスクリプトを利用することで、インストール作業がスムーズに進み、作業時間を大幅に短縮できます。

Tomcat自動設定スクリプトの目的

Tomcat自動設定スクリプトの目的は、手動で行うTomcatのインストール作業や設定作業を完全に自動化することです。新しいサーバーにTomcatをインストールする場合や、複数のサーバーで同じ環境を再構築する必要がある場合に、このスクリプトを使うことで、インストールから設定、サービス登録までを一貫して自動化できます。このようにすることで、作業の効率化とエラーの削減が実現します。

Tomcatのインストールには、まず開発サーバーの環境を準備する必要があります。具体的には、init_rhel_devhost.shを使用してサーバーの初期設定を行ます

開発サーバーの初期設定については、こちらの記事【RHEL系Linux】開発サーバー初期設定スクリプトの完全自動化をご覧ください。

▶︎【RHEL系Linux】開発サーバー初期設定スクリプトの完全自動化

次にinstall_apache_host.shを使ってApacheをインストールします。

ApacheとLet's Encryptの自動構築スクリプトについては、こちらの記事【RHEL系Linux】Apache+Let's Encrypt 自動構築スクリプト|バーチャルホスト対応・完全自動化ツールをご覧ください。

▶︎【RHEL系Linux】Apache+Let's Encrypt 自動構築スクリプト|バーチャルホスト対応・完全自動化ツール

その後、install_tomcat_host.shでTomcatをインストールすることで、必要な設定が完了します。これにより、開発環境の構築が効率的に行え、手間を大幅に削減できます。

スクリプトの役割と重要性

このスクリプトの役割は、Tomcatのインストールや設定を自動化することで、手動作業の手間を削減し、一貫性のある環境構築を可能にすることです。手動でインストールを行うと、作業ミスや設定漏れが発生するリスクが高くなりますが、スクリプトを使うことで、そのようなリスクを減らし、同じ設定を確実に適用できます。

特に、開発環境や本番環境のセットアップを再現性高く行いたい場合に、このスクリプトは非常に重要な役割を果たします。スクリプトにより、サーバーの構成が統一され、どの環境でも同じ設定を適用できるため、環境間での不一致を防ぐことができます。

スクリプト設計の基本方針

Tomcat自動設定スクリプトの設計においては、以下の基本方針に従っています。

基本方針

  • 簡潔性:
    スクリプトは、Tomcatのインストールと設定を最小限のステップで完了できるように設計されています。無駄な処理を排除し、必要な作業のみを実行します。
  • 柔軟性:
    設定を外部ファイルで管理し、ユーザーが必要に応じて変更できるようにしています。これにより、異なる環境や要件に柔軟に対応できます。 エラー処理とログ出力の強化: スクリプト実行中のエラーを適切に処理し、詳細なログを出力します。これにより、問題発生時に迅速に対応できるようになっています。
  • 再利用性:
    他のプロジェクトやサーバーに再利用できるように、汎用的な設計を採用しています。必要な部分だけを変更することで、さまざまな環境に対応可能です。
  • 削除処理の重要性:
    インストール時の不要なパッケージや設定ファイルを削除する処理も含まれています。例えば、不要なTomcatインスタンスや関連パッケージを完全に削除することで、システムのクリーンさを保ちます。また、既存の環境にインストールする際には、旧バージョンを削除し、新しいバージョンに上書きする処理も行っています。
  • 自動化の徹底:
    インストール作業や設定のすべてを自動化し、手動操作の手間を最小限に抑えることを目指しています。

これらの方針に基づき、スクリプトは操作が簡単で、エラー発生時に対処しやすい設計となっています。自動化された環境構築により、時間の節約と運用ミスの防止が可能になります。

スクリプトの構成と設計要素

Tomcat自動インストールスクリプトは、効率的で簡潔にTomcatのインストールと設定を行うために設計されています。このセクションでは、スクリプトの構成要素と設計方針について詳しく説明します。スクリプトの設計を理解することで、今後のカスタマイズや運用においてスムーズに活用できるようになります。

スクリプトの主要な部分

Tomcat自動インストールスクリプトは、主に以下の3つの主要な部分で構成されています。それぞれの部分は、インストールプロセス全体を効率化するために重要な役割を果たしています。

主要パート

  1. 初期設定:
    このセクションでは、スクリプトで使用する環境変数や基本的なパスを設定します。例えば、Tomcatのインストール先ディレクトリや、ログファイルの保存先などを指定します。これにより、スクリプト内で必要なファイルを一貫して適切な場所に配置できます。
  2. Tomcatのインストール:
    インストール処理では、指定されたTomcatのバージョンをダウンロードし、展開します。さらに、Tomcatが正常に動作するために必要な依存パッケージや設定も自動で適用されます。これにより、手動で行うインストール作業を完全に自動化できます。
  3. サービス化と起動設定:
    Tomcatをsystemdサービスとして設定し、自動起動や停止ができるようにします。これにより、サーバー再起動後にもTomcatが自動的に起動するように設定され、運用が効率化されます。

使用される変数一覧

スクリプト内で使用される主な変数は以下の通りです。これらの変数はスクリプト全体で一貫して使用され、Tomcatのインストールと設定を制御します。

変数名説明
BASE_PATHスクリプトのベースとなるディレクトリ(デフォルトは「/home/bepro/projects/scripts」)
LOG_PATHログファイルの保存先ディレクトリ
TOMCAT_VERインストールするTomcatのバージョン(例:10.1.43)
INSTALL_DIRTomcatのインストール先ディレクトリ(デフォルトは「/opt/tomcat」)
SERVICE_NAMEsystemdサービス名(デフォルトは「tomcat」)
TOMCAT_TARTomcatのインストールアーカイブのパス(例:/tmp/apache-tomcat-10.1.43.tar.gz)
TOMCAT_URLTomcatのダウンロードURL(デフォルトはApacheの公式URL)

これらの変数を変更することで、インストール先のディレクトリや使用するTomcatのバージョン、サービス名などをカスタマイズできます。変数を外部ファイルで管理することで、スクリプトの再利用性や柔軟性が高まります。

実装されている主な関数と処理の詳細

スクリプト内で実装されている主な関数とその処理内容は以下の表にまとめました。これらの関数は、Tomcatのインストール、設定、サービス化などを自動で行うために重要な役割を果たします。

主要関数

  • line:
    出力メッセージを整理するための関数です。スクリプトの実行中にメッセージをわかりやすく区切り、ユーザーに通知します。例えば、処理の開始時や終了時にメッセージを表示します。
  • disable_selinux:
    SELinuxを無効化するための関数です。Tomcatが正常に動作するために、SELinuxを無効化する必要がある場合に使用されます。
  • install_tomcat:
    Tomcatのインストールを行うための関数です。この関数は、指定されたバージョンのTomcatをダウンロードし、適切なディレクトリに展開します。また、必要な設定ファイルを変更し、Tomcatが正常に動作するようにします。
  • create_service:
    systemdサービスユニットを作成するための関数です。Tomcatをサービスとして登録し、systemctlを使って管理できるように設定します。これにより、Tomcatがシステムの起動時に自動的に開始されるようになります。
  • clear_zombie_pid:
    ゾンビプロセスを防ぐための関数です。Tomcatが正常に起動しない場合や、プロセスが残ってしまった場合に、そのPIDファイルを削除し、関連するプロセスを強制終了します。

これらの関数は、Tomcatのインストールからサービス化、トラブルシューティングまでを自動で行い、管理者の手間を削減します。特に、ゾンビプロセスを防ぐ`clear_zombie_pid`や、SELinuxを無効化する`disable_selinux`は、Tomcatが適切に動作するために欠かせない処理です。

スクリプト全体は、シンプルでありながら強力な機能を持っており、ユーザーの環境に応じて柔軟にカスタマイズできます。インストールや設定の自動化により、管理者はより効率的に作業を進めることができます。

Tomcat自動設定スクリプトの実行手順

Tomcatは、Javaで動作するアプリケーションサーバーとして広く利用されています。しかし、手動でのインストールや設定作業は時間がかかり、ミスが生じやすいため、効率的に環境を構築するためには自動化スクリプトを使用することが非常に有効です。本記事では、Tomcat自動設定スクリプトの実行手順について、前提となる環境、スクリプトの実行方法、インストール後の設定と確認まで、順を追って解説します。

実行環境前提条件

Tomcat自動設定スクリプトを実行するためには、いくつかの前提条件が必要です。まず、TomcatはRHEL系のLinux(CentOS、AlmaLinux、Rocky Linuxなど)で使用されることを前提にしているため、適切な環境が整っていることが重要です。

実行環境前提条件

  • RHEL系Linux環境:
    CentOSやAlmaLinux、Rocky Linuxなど、RHEL系のディストリビューションで動作します。Debian系の環境では動作しない可能性があるため、RHEL系ディストリビューションを使用する必要があります。
  • root権限:
    スクリプトの実行にはroot権限またはsudo権限が必要です。Tomcatのインストールやシステム設定を変更するためには、管理者権限が求められます。
  • 依存パッケージ:
    スクリプト内で必要なパッケージ(wget、curl、tarなど)がインストールされていることを確認してください。これらは、Tomcatをインストールし、必要な設定を行うために必要です。
  • Javaのインストール:
    TomcatはJavaを必要とするため、Java(OpenJDK)がインストールされていることが前提です。特に、Tomcat 10以降では、Java 11以上が必要です。

以上の前提条件を確認し、実行環境が整ったら、スクリプトを実行する準備が整います。

スクリプトの実行方法

Tomcat自動設定スクリプトは、非常にシンプルなコマンドで実行できます。以下では、実際にスクリプトを実行する方法について解説します。まず、スクリプトを実行する前に、ファイルに実行権限を付与する必要があります。

以下のコマンドを実行して、スクリプトの実行権限を付与します。

chmod +x install_tomcat_host.sh

次に、実行権限を付与したスクリプトを実行します。実行時には、Tomcatのインストール先ディレクトリやポート番号など、いくつかの設定項目がスクリプト自身で自動で確認され、必要に応じて変更することができます。

sudo ./install_tomcat_host.sh

上記のコマンドを実行すると、スクリプトが自動的にTomcatのインストールから設定、サービス登録までを行います。Tomcatが正常に動作するためには、いくつかの設定が必要です。これには、SELinuxの無効化やファイアウォールで必要なポートを開放する作業が含まれます。

本スクリプトの実行前に「init_rhel_devhost.sh」 スクリプトを実行してOSの設定を済ませていれば、これらの作業が自動で行われているはずです。

具体的には、SELinuxを無効化するためにsetenforce 0を実行し、/etc/selinux/configファイルで設定を変更します。また、ファイアウォール設定も自動で行い、Tomcatが使用するポート(80番、443番など)を開放します。これにより、Tomcatが正常に動作するための環境が自動的に整備されます。

インストール後の設定と確認

スクリプトの実行後、Tomcatが正しくインストールされているか、設定が適切に反映されているかを確認する必要があります。以下の手順で確認作業を行います。

事後確認

  • Tomcatの起動確認:
    Tomcatが正常に起動しているかを確認するために、以下のコマンドを実行します:

    systemctl status tomcat

    このコマンドを実行すると、Tomcatのサービスが正常に起動しているかどうかを確認できます。
    ステータスが`active (running)`であれば、Tomcatは正常に起動しています。
  • ポートの確認:
    Tomcatが使用するポート(デフォルトでは8080)がファイアウォールで開放されているかを確認するため、以下のコマンドを実行します:

    firewall-cmd --list-all

    これにより、必要なポートが開放されているかを確認できます。ポート8080が開放されていない場合は、
    次のコマンドでポートを開放することができます:

    firewall-cmd --permanent --add-port=8080/tcp

    ポートを開放後、ファイアウォールの設定を再読み込みするためには、以下のコマンドを実行します:

    firewall-cmd --reload

  • ログの確認:
    インストール後、Tomcatのログが適切に出力されているかを確認します。
    Tomcatのログファイルは、デフォルトでは`/opt/tomcat/logs`ディレクトリに保存されます。
    以下のコマンドでログファイルを確認できます:

    cat /opt/tomcat/logs/catalina.out

    ログにエラーメッセージが表示されていないことを確認し、正常に動作していることを確認します。

これらの手順を踏むことで、Tomcatが正常にインストールされ、設定が正しく反映されていることを確認できます。もし問題が発生した場合、ログファイルを確認することで、エラーの原因を特定することができます。

実践的な利用方法とサンプルコード

Tomcat自動インストールスクリプトは、Tomcatのインストールから設定までを自動化するためのツールです。このセクションでは、基本的な使い方、よくある利用ケース、そしてスクリプトを導入するメリットについて解説します。

前提となる実行環境

Beエンジニアでシェルスクリプトを実行する環境は下記の通りとします。

実行環境

BASE_DIR(任意のディレクトリ)

  • scripts
    • bin(実行スクリプト格納領域)
      • <<各種実行スクリプト>>.sh (実行ファイル)
    • com(共通スクリプト格納領域)
      • logger.shrc(共通ログ出力ファイル)
      • utils.shrc(共通関数定義ファイル)
    • etc(設定ファイル等の格納領域)
      • infraMessage.conf(メッセージ定義ファイル)
    • log(スクリプト実行ログの格納領域)
      • スクリプト名.log 
    • tmp(テンポラリ領域)
    • rep(レポート出力領域)

Tomcat自動インストールスクリプト

ここでは、Tomcatを自動でインストールし、設定を行うためのスクリプトのソースコードを紹介します。このスクリプトは、Tomcatのインストールから設定、サービス化までを自動化するもので、複数のサーバーで同じ環境を迅速に構築する際に非常に有効です。

以下に示すソースコードを使用することで、手動で行うインストール作業の手間を大幅に省くことができます。

#!/usr/bin/env bash

#====================================================
# Tomcatインストールスクリプト(install_tomcat_host.sh)
# バージョン: v1.2.0(2025-07-22)
# - conf外部化対応 (/etc/tomcat-install.conf)
# - ポート自動抽出・オプション指定
# - エラー処理とログ出力強化
#====================================================

# 共通関数・ログ読み込み
. "$(dirname "$0")/../com/logger.shrc"
. "$(dirname "$0")/../com/utils.shrc"
setLANG     utf-8

# ------------------------------------------------------------------
# variables (変数の宣言領域)
# ------------------------------------------------------------------
scope="var"
BASE_PATH="${BASE_PATH:-/home/bepro/projects/scripts}"
ETC_PATH="${BASE_PATH}/etc/tomcat"
LOG_PATH="${BASE_PATH}/log"
TMP_PATH="${BASE_PATH}/tmp"

TOMCAT_VER="${TOMCAT_VER:-10.1.43}"
JDK_MAJOR="${JDK_MAJOR:-17}"
INSTALL_DIR="${INSTALL_DIR:-/opt/tomcat}"
SERVICE_NAME="${SERVICE_NAME:-tomcat}"
TOMCAT_USER="${TOMCAT_USER:-tomcat}"
TOMCAT_TAR="${TMP_PATH}/apache-tomcat-${TOMCAT_VER}.tar.gz"
TOMCAT_URL="${TOMCAT_URL:-https://dlcdn.apache.org/tomcat/tomcat-10/v${TOMCAT_VER}/bin/apache-tomcat-${TOMCAT_VER}.tar.gz}"

rc=0

# ----------------------------------------------------------
# functions (関数を記述する領域)
# ----------------------------------------------------------
scope="func"

# ----------------------------------------------------------
# Executes the processing at the end..
# ----------------------------------------------------------
# return N/A
# ----------------------------------------------------------
terminate() {
  erase
}

# ----------------------------------------------------------
# 引数チェックの関数
# ----------------------------------------------------------
checkArgs() {
    # ポートが指定されていない場合はデフォルトで8080を設定
    if [ -z "$PORT" ]; then
        PORT=8080
    fi

    # ポート番号が有効な数字かどうか確認
    if ! [[ "$PORT" =~ ^[0-9]+$ ]]; then
        echo "ERROR: 無効なポート番号が指定されました。数字のみを指定してください。"
        exit 1
    fi

    # -m 引数が空の場合、ポートのみ指定されている場合はスキップ
    if [ -n "$MODE" ]; then
        # MODEの値が正しいか確認("erase"の確認)
        if [[ "$MODE" != "erase" ]]; then
            echo "ERROR: 無効なMODE値が指定されました。使用可能なMODEは 'erase' です。"
            exit 1
        fi
    fi
}

# ------------------------------------------------------------------
# pre-process (事前処理ロジックを記述する領域)
# ------------------------------------------------------------------
scope="pre"

startLog

trap "terminate" 0 1 2 3 15

#====================================================
# Step 1: 初期変数定義(デフォルト値)
#====================================================
MODE=""
PORT=""
while getopts "m:p:" OPT; do
    case $OPT in
        m) MODE="$OPTARG" ;;
        p) PORT="$OPTARG" ;;
    esac
done

checkArgs $@

CONF_FILE="/etc/tomcat-install.conf"
[ -f "$CONF_FILE" ] && . "$CONF_FILE"

# ------------------------------------------------------------------
# main-process (メインロジックを記述する領域)
# ------------------------------------------------------------------
scope="main"

#====================================================
# Step 2: 削除モード(erase)
#====================================================
if [ "${MODE}" == "erase" ]; then
    erase() {
        logOut "INFO" "Tomcat関連の削除処理を開始します。"

        systemctl stop    "${SERVICE_NAME}" 2>/dev/null
        systemctl disable "${SERVICE_NAME}" 2>/dev/null
        rm -f "/etc/systemd/system/${SERVICE_NAME}.service" \
              "/etc/systemd/system/multi-user.target.wants/${SERVICE_NAME}.service"
        systemctl daemon-reload

        pkill -9 -f 'org.apache.catalina' 2>/dev/null || true

        rm -rf "${INSTALL_DIR}"
        userdel -r "${TOMCAT_USER}" 2>/dev/null || true

        logOut "INFO" "Java(OpenJDK) を削除します。"
        rpm -qa | grep -E '^java-[0-9]+-openjdk' | xargs -r dnf remove -y

        logOut "INFO" "TomcatとJavaの削除が完了しました。"
        exitLog 0
    }
    erase
fi

#====================================================
# Step 3: Javaインストール/バージョン確認
#====================================================
need_java_install=false
if command -v java &>/dev/null; then
    major=$(java -XshowSettings:properties -version 2>&1 \
             | awk '/java.version =/ {split($3,v,"."); print (v[1]=="1")?v[2]:v[1]}')
    if [ "$major" -lt 11 ]; then
        need_java_install=true
        logOut "INFO" "現在 Java${major}  → Tomcat10 には 11+ が必要なためアップグレードします。"
    else
        logOut "INFO" "Java${major} は要件を満たしています。"
    fi
else
    need_java_install=true
    logOut "INFO" "Java が未インストールのため、OpenJDK${JDK_MAJOR} を導入します。"
fi

if $need_java_install; then
    dnf install -y java-${JDK_MAJOR}-openjdk java-${JDK_MAJOR}-openjdk-devel || {
        logOut "ERROR" "Java(OpenJDK) のインストールに失敗しました。"
        exitLog ${JOB_ER}
    }
    java_path=$(alternatives --list | awk '/java-'"${JDK_MAJOR}"'-openjdk.*\/bin\/java/ {print $3; exit}')
    if [ -n "$java_path" ]; then
        alternatives --set java "$java_path"
        logOut "INFO" "Java${JDK_MAJOR} を既定に設定しました。"
    else
        logOut "ERROR" "alternatives に Java が登録されていません。"
        exitLog ${JOB_ER}
    fi
fi

#====================================================
# Step 4: Tomcatアーカイブ取得
#====================================================
logOut "INFO" "Tomcat ${TOMCAT_VER} をダウンロードします。"
mkdir -p "${TMP_PATH}"
[ -f "${TOMCAT_TAR}" ] && rm -f "${TOMCAT_TAR}"
curl -f -L -o "$TOMCAT_TAR" "$TOMCAT_URL"
rc=$?
if [ $rc -ne 0 ]; then
    logOut "ERROR" "Tomcat アーカイブのダウンロードに失敗しました。curlの終了コード: $rc"
    exitLog ${JOB_ER}
fi
logOut "INFO" "Tomcat を正常にダウンロードしました。[ ${TOMCAT_TAR} ]"

#====================================================
# Step 5: 展開
#====================================================
[ -d "${INSTALL_DIR}" ] && rm -rf "${INSTALL_DIR}"
mkdir -p "${INSTALL_DIR}"
tar -xzf "${TOMCAT_TAR}" -C "${INSTALL_DIR}" --strip-components=1
if [ $? -ne 0 ]; then
    logOut "ERROR" "Tomcat アーカイブの展開に失敗しました。"
    exitLog ${JOB_ER}
fi

#====================================================
# Step 6: ユーザー作成
#====================================================
if ! id "${TOMCAT_USER}" &>/dev/null; then
    useradd -r -m -U -d "${INSTALL_DIR}" -s /bin/false "${TOMCAT_USER}"
    if [ $? -ne 0 ]; then
        logOut "ERROR" "Tomcatユーザーの作成に失敗しました。"
        exitLog ${JOB_ER}
    fi
    logOut "INFO" "Tomcatユーザーを作成しました。[ ${TOMCAT_USER} ]"
else
    logOut "INFO" "Tomcatユーザーは既に存在します。[ ${TOMCAT_USER} ]"
fi

#====================================================
# Step 7: 所有権設定
#====================================================
chown -R "${TOMCAT_USER}:${TOMCAT_USER}" "${INSTALL_DIR}"
logOut "INFO" "Tomcatディレクトリの所有権を設定しました。"

#====================================================
# Step 8: ポート抽出
#====================================================
if [ -z "$PORT" ]; then
    # ポート番号が指定されていない場合、server.xmlから現在のポートを抽出
    PORT=$(awk -F'[="]' '/<Connector/ && /protocol="HTTP\/1.1"/ {for(i=1;i<=NF;i++) if($i=="port") {print $(i+2); exit}}' "${INSTALL_DIR}/conf/server.xml")
    
    if [ -z "$PORT" ]; then
        # 抽出できなかった場合のログ
        logOut "WARNING" "server.xml からポート番号の抽出に失敗しました。デフォルトの 8080 を使用します。"
        PORT=8080  # 抽出できなければ8080をデフォルト
    else
        logOut "INFO" "server.xml よりポート ${PORT} を抽出しました。"
    fi
else
    # ポート番号が指定されている場合、そのまま使用
    logOut "INFO" "指定されたポート番号を使用します。[ ${PORT} ]"
fi

# ポート番号を server.xml に反映
if [ -n "$PORT" ]; then
    # server.xml 内の <Connector port="8080" を指定されたポート番号に変更
    sed -i "s|<Connector port=\"8080\"|<Connector port=\"$PORT\"|" "${INSTALL_DIR}/conf/server.xml"
    logOut "INFO" "server.xml のポート番号を ${PORT} に設定しました。"
fi

# ===================================================
# PIDのゾンビプロセスを防ぐ関数
# ===================================================
clear_zombie_pid() {
    # PIDファイルが存在する場合、そのPIDを強制終了
    if [ -f ${INSTALL_DIR}/temp/tomcat.pid ]; then
        kill -9 $(cat ${INSTALL_DIR}/temp/tomcat.pid) || true
    fi

    # javaプロセスが残っていた場合、そのプロセスを強制終了
    pgrep -f "java" && kill -9 $(pgrep -f "java") || true
}

# ===================================================
# Step 9: systemdサービスユニットの作成
# ===================================================
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
JAVA_HOME_PATH=$(dirname "$(dirname "$(readlink -f "$(command -v java)")")")

# 最初にゾンビPIDを確認・削除
clear_zombie_pid

# systemdサービスユニットを作成
cat <<EOF > "${SERVICE_FILE}"
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking
User=${TOMCAT_USER}
Group=${TOMCAT_USER}

Environment="JAVA_HOME=${JAVA_HOME_PATH}"
Environment="CATALINA_PID=${INSTALL_DIR}/temp/tomcat.pid"
Environment="CATALINA_HOME=${INSTALL_DIR}"
Environment="CATALINA_BASE=${INSTALL_DIR}"
ExecStart=${INSTALL_DIR}/bin/startup.sh
ExecStop=${INSTALL_DIR}/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
EOF

# エラーチェック
if [ $? -ne 0 ]; then
    logOut "ERROR" "Tomcatのサービスユニット作成に失敗しました。"
    exitLog ${JOB_ER}
fi

logOut "INFO" "Tomcat systemd ユニットファイルを作成しました。[ ${SERVICE_FILE} ]"

#====================================================
# Step 10: systemd起動&確認
#====================================================
systemctl daemon-reexec
systemctl daemon-reload
systemctl enable "${SERVICE_NAME}"
systemctl start "${SERVICE_NAME}"

if [ $? -ne 0 ]; then
    logOut "ERROR" "Tomcatサービスの起動に失敗しました。"
    exitLog ${JOB_ER}
fi

sleep 3
if ! ss -ltnp | grep ":${PORT}" | grep java >/dev/null; then
    logOut "ERROR" "Tomcatがポート${PORT}で待機していません。起動に失敗した可能性があります。"
    exitLog ${JOB_ER}
fi

logOut "INFO" "Tomcatサービスを起動しました。[ ポート${PORT} LISTEN 確認済み ]"
# ----------------------------------------------------------
# post-process (事後処理ロジックを記述する領域)
# ----------------------------------------------------------
scope="post"

logOut "INFO" "Tomcat自動インストールスクリプトを正常終了します。"
exitLog ${rc}1

基本的な使い方

まずは、`install_tomcat_host.sh` スクリプトを使ってTomcatをインストールする方法を説明します。

スクリプトを実行することで、以下の手順でTomcatがインストールされ、必要な設定が自動で行われます:

  • Tomcatのインストール

    sudo ./install_tomcat_host.sh

    このコマンドを実行すると、Tomcatが${INSTALL_DIR}に指定されたディレクトリへインストールされ、port:8080でTomcatが起動します。
  • ポート番号の変更(オプション)
    ポート番号を指定して実行することで、Tomcatがそのポートで起動するように設定できます。

    sudo ./install_tomcat_host.sh -p 8081

    「-p 8081」を引数にしてこのコマンドを実行すると、Tomcatが${INSTALL_DIR}に指定されたディレクトリへインストールされ、port:8081でTomcatが起動します。
  • 削除モード
    `-m erase` オプションを使用すると、インストールされているTomcatや関連ファイルを削除することができます。

    sudo ./install_tomcat_host.sh -m erase

    このコマンドは、Tomcatを停止し、関連する設定ファイルやインストールされたディレクトリを削除します。

よくある利用ケース

このスクリプトはさまざまな状況で役立ちます。以下にいくつかの典型的な利用ケースを挙げます:

  • 新しい開発環境の構築:
    新たに開発サーバーをセットアップする際に、スクリプトを実行することで、すぐにTomcat環境を構築できます。
  • テスト環境の設定:
    テスト環境で使用するTomcatを手動で設定する手間を省き、効率よくインストールできます。
  • 既存のTomcatの削除:
    `-m erase` オプションを使用することで、すでにインストールされたTomcatを簡単に削除できます。

Tomcat自動設定スクリプトを導入するメリット

この自動インストールスクリプトを使用することで、以下のようなメリットを得ることができます:

  • 時間の節約:手動での設定作業が不要になるため、Tomcatのインストールと設定が迅速に行えます。
  • 設定ミスの防止:スクリプトを使用することで、一貫した設定が適用され、設定ミスが防げます。
  • 簡単な削除操作:`-m erase` オプションを使うことで、インストールしたTomcatや関連するファイルを簡単に削除できます。
  • 一貫した環境構築:スクリプトを使えば、複数のサーバーで同じ設定を素早く展開できます。

よく読まれている記事

1

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか? 無料で使えるだけでなく、高い柔軟 ...

2

Linux環境でよく目にする「Vim」という名前。サーバーにログインしたら突然Vimが開いてしまい、「どうやって入力するの?」「保存や終了ができない!」と困った経験をした人も多いのではないでしょうか。 ...

3

ネットワーク技術は現代のITインフラにおいて不可欠な要素となっています。しかし、ネットワークを深く理解するためには、その基本となる「プロトコル」と「レイヤ」の概念をしっかり把握することが重要です。 こ ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

5

Javaは世界中で広く使われているプログラミング言語であり、特に業務システムやWebアプリケーションの開発において欠かせない存在です。本記事では、初心者向けにJavaの基礎知識を網羅し、環境構築から基 ...

-Shellの基礎知識(実践編)