【WebLogic】【CentOS 6、CentOS 7】起動スクリプトを作成する

前回、WebLogic Server をインストールしました。

最新の WebLogic Server インストール方法はこちらを参考してください。

 

【Linux】WebLogic Server 12c のインストール手順

 

 

カスタムキーストアを設定して SSL 接続をする手順はこちらです。

 

WebLogic Server 12c 環境でキーストアを「カスタム・アイデンティティとカスタム信頼」にして SSL 接続をする手順

 

 

今回は「CentOS 6」用の WebLogic Server 起動スクリプト作成&自動起動設定「CentOS 7」用の WebLogic Server の自動起動設定をします。

(CentOS 6 と 7 では設定が異なります)

 

その結果、

  • OS の再起動時に自動的に WebLogic Server が起動する
  • 「service(CentOS 6)」コマンドや「systemctl(CentOS 7)」コマンドで起動・停止・再起動・状態確認ができる

ようになります。

 

【CentOS 6, 7 共通】起動時にアカウントとパスワードを読み込む

起動スクリプトを設定する前に、最初に「アカウント」「パスワード」の問題を解決しておきます。

WebLogic を「本番モード」でインストールした場合、WebLogic を起動するたびに「アカウント」「パスワード」の入力が求められます。

 

しかし起動スクリプトなので入力できません。

その場合は「boot.properties」ファイルを作成し、WebLogic 起動時に「アカウント」と「パスワード」を自動で読み込ませます。

GUI画面上より端末を起動して以下のコマンドを実行して GUI のエディタを起動します。

# mkdir -p /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/security ← 「boot.properties」ファイルを格納するフォルダを作成します。

# cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/security

# gedit boot.properties ← gedit コマンドを実行すると GUI のエディタが起動します。

 

下図のように GUI のエディタが起動するので以下の2行を追加して「保存」をクリックします。

username=weblogic

password=xxxx

 

再度 boot.properties を確認するとハッシュ化されていることが分かります。

cat boot.properties
username={AES}yfXl5MRd1YyWAhf6tDMZUL+vbU3b9QWkIGH6SEkLLWI=
password={AES}8qJtLf2GzIPU12ekJ8cmhkT9m1e7L0/GCtX3nBoMOzI=

 

boot.properties ファイルとは?

ここで「boot.properties」ファイルについて補足します。

boot.propertiesファイルは WebLogic Server が起動するために利用する「アカウント」と「パスワード」が記載されているファイルです。

「開発モード」は「アカウント」と「パスワード」は不要ですが、「本番モード」は「アカウント」と「パスワード」が必要です。

しかし、WebLogic Server を起動するたびにコンソールから「アカウント」と「パスワード」を入力するのは難しいです。

そこで「boot.properties」ファイルにあらかじめ記述することで、コンソール上から「アカウント」と「パスワード」を入力する必要がなくなります。

しかも「アカウント」と「パスワード」も上記のように、「{AES}yfXl5MRd1YyWAhf6tDMZUL+vbU3b9QWkIGH6SEkLLWI=」のように暗号化されるのでセキュリティ的にも安心です。

暗号化されるタイミングは起動時です。

「{AES}」とありますように AES で暗号化されます。(10.3.1以降)

10.3.0以前は「3DES」だったようです。

※WebLogic 10.3 がリリースされたのは2008年8月です。

 

【CentOS 6】WebLogic 起動スクリプト

CentOS 6 用の起動スクリプト「weblogic」を準備します。

/etc/init.d ディレクトリ配下に配置することにより、OS 起動時に自動起動できるようにします。

「chkconfig 345」で分かりますように、ランレベル「3,4,5」で起動します。

# cd /etc/init.d
vi weblogic ← weblogicという起動スクリプトを作ります。

 

「vi weblogic」コマンドを実行して、下記の起動スクリプトを作成します。

※赤文字のコメントは外してください。

  • WEBLOGIC_LOCK
  • WEBLOGIC_HOME
  • WEBLOGIC_OWNER

の環境変数は適宜環境に合せて修正します。

#!/bin/sh
#
# Startup script for Oracle WebLogic Server
#
# chkconfig: 345 98 10 ←この行は一見するとコメントアウトされているように見えますが、「# chkconfig: ~ 」の構文で起動するランレベルが設定されますので忘れずに記載しましょう。
# description: Oracle WebLogic Server.

WEBLOGIC_LOCK=/var/lock/weblogic
WEBLOGIC_HOME=/home/weblogic/wls12212/user_projects/domains/base_domain/ ← WebLogic Serverのホームディレクトリを設定します。
WEBLOGIC_OWNER=weblogic

case "$1" in
    start)
        if [ -f $WEBLOGIC_LOCK ]; then
            echo $0 already started.
            exit 1
        fi

        echo "Starting WebLogic:"
        su - $WEBLOGIC_OWNER -c "${WEBLOGIC_HOME}/bin/startWebLogic.sh >& /tmp/weblogic.log &"

        touch $WEBLOGIC_LOCK
        ;;
    stop)
        if [ ! -f $WEBLOGIC_LOCK ]; then
            echo $0 already stopped.
            exit 1
        fi

        echo "Stoping BEA WebLogic:"
        su - $WEBLOGIC_OWNER -c "${WEBLOGIC_HOME}/bin/stopWebLogic.sh >& /tmp/weblogic.log ;exit 0"

        rm -f $WEBLOGIC_LOCK
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    status)
        if [ -f $WEBLOGIC_LOCK ]; then
            echo $0 started.
        else
            echo $0 stopped.
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit 0

 

上記の起動スクリプトは以下のサイトを参考にしました。

ありがとうございます。

http://java6.blog117.fc2.com/blog-entry-25.html

 

weblogic 起動スクリプトに実行権限を与えます。

# chmod +x weblogic

 

以上で起動スクリプトの準備は完了です。

【CentOS 6】WebLogic のサービス化手順

起動スクリプト weblogic を作成したので chkconfig コマンドを実行してサービス化をします。

# chkconfig --add weblogic

 

正常にサービス化されたのか確認します。

# chkconfig
udev-post   0:off  1:on   2:on   3:on  4:on  5:on  6:off
weblogic    0:off  1:off  2:off  3:on  4:on  5:on  6:off ← 上で記述した「# chkconfig: 345」のようにランレベル3,4,5で起動するように設定されていることが分かります。

 

# ls -l /etc/rc3.d/

lrwxrwxrwx. 1 root root 18  8月  3 22:01 2017 S98weblogic -> ../init.d/weblogic ← 各ランレベルのディレクトリ配下に
シンボリックリンクができていることを確認します。

 

上記手順で起動スクリプトがサービス化されました。

【CentOS7】WebLogic のサービス化手順

続いて「CentOS 7」の WebLogic のサービス化手順です。

CentOS 6 では /etc/init.d/weblogic のスクリプトを作成しましたが、CentOS 7 では「startWebLogic.sh」「stopWebLogic.sh」systemd に登録することでサービス化します。

そのため、CentOS 6 のような起動スクリプトを作りません。

 

スクリプトを確認する

WebLogic をインストールすると自動的に作成される「startWebLogic.sh」「stopWebLogic.sh」を利用します。

スクリプトの場所を確認します。

※適宜、自サーバー環境に合わせて確認してください。

startWebLogic.sh、stopWebLogic.sh があるディレクトリ(本環境の場合)

/home/weblogic/wls12212/user_projects/domains/base_domain/bin/startWebLogic.sh
/home/weblogic/wls12212/user_projects/domains/base_domain/bin/stopWebLogic.sh

 

/etc/systemd/system ディレクトリの下に Unit 定義ファイルを作る

次に「/etc/systemd/system」ディレクトリの下に Unit 定義ファイル(ユニット定義ファイル)を作成します。

# vi /etc/systemd/system/weblogic.service

[Unit]
Description = WebLogic Server daemon

[Service]
User = weblogic
Group = weblogic
Type = simple
Environment= /home/weblogic/wls12212/user_projects/domains/base_domain
ExecStart = /home/weblogic/wls12212/user_projects/domains/base_domain/bin/startWebLogic.sh
ExecStop = /home/weblogic/wls12212/user_projects/domains/base_domain/bin/stopWebLogic.sh
Restart = always

[Install]
WantedBy = multi-user.target

 

Unit 定義ファイル(ユニット定義ファイル)とは?

ユニット定義ファイルとは、ユニットを定義するファイルです。

ユニットとは、「起動するサービスの1単位」を言います。

CentOS6 までは起動スクリプトでサービスを起動していました。

CentOS7 からは起動するサービスを「ユニット」単位で制御(コントロール)します。

 

CentOS6 までの起動スクリプトと何が違うのかというと、「ユニット」は並行で起動処理ができます。

そのため、起動速度が速くなりました。

 

【補足】Type の種類

上記の「Type」は「Type = simple」と、「simple」が指定されています。

他にも様々な種類のタイプが指定できます。

  • Type = simple → デフォルトの値です。ExecStartで起動するプロセスがメインになります。また、起動するプロセスはフォアグラウンドで実行を継続します。コマンドを実行したらすぐに起動完了と判定します。
  • Type = forking → 子プロセスをメインプロセスとしてバックグラウンドで起動します。親プロセスが終了したタイミングを起動完了と判断します。
  • Type = oneshot → simple と似ていますが、プロセスを実行したら、ユニットが起動する前に終了します。
  • Type = notify → これも simple と似ていますが、systemdのライブラリ関数「sd_notify()」で送信された後に起動します。

 

systemd の Restart の種類

以下の種類の「Restart」があります。

Restart は、サービスが終了してしまった場合に再起動する条件を指定します。

「Restart」は今までの「respawn」に該当します。

  • Restart = always ← 常に再起動を行います。
  • Restart = on-abort ← キャッチしていないシグナルを受信してサービスが停止した場合に再起動します。
  • Restart = on-failure ← 0(ゼロ)以外の終了コードでサービスが停止した場合に再起動します。
  • Restart = on-success ← 0(ゼロ)の終了コードでサービスが停止した場合に再起動します。
  • Restart = no → サービスの再起動は行いません。

 

 

UnitがServiceとして認識されたか確認する手順

以下のコマンドを実行して、サービス名が表示されれば正常に登録されています。

# systemctl list-unit-files --type=service

wacom-inputattach@.service                    static
weblogic.service                              disabled → デフォルトで「disabled」で登録されています。
wpa_supplicant.service                        disabled
zram.service                                  static

 

サービスを「enable」に変更して起動する

サービスを「enable」に変更して確認します。

# systemctl enable weblogic.service
Created symlink from /etc/systemd/system/multi-user.target.wants/weblogic.service to /etc/systemd/system/weblogic.service.

# systemctl list-unit-files | grep weblogic
weblogic.service                              enabled ← enabled になっていることを確認します。

weblogic サービスを起動します。

# systemctl start weblogic.service
# systemctl status weblogic.service -l ← -l オプションをつけると、ログが途中で省略されません。
weblogic.service - WebLogic Server daemon
   Loaded: loaded (/etc/systemd/system/weblogic.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2017-08-02 18:42:42 JST; 3min 56s ago
   

 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <Server> <BEA-002613> <チャネル"DefaultSecure[4]" は、現在fe80:0:0:0:ffb2:5533:27b1:fa33: 7002でプロトコルiiops, t3s, ldaps, httpsをリスニングしています。>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <Server> <BEA-002613> <チャネル"Default[4]"は、現 在fe80:0:0:0:ffb2:5533:27b1:fa33: 7001でプロトコルiiop, t3, ldap, snmp, httpをリスニングしています。>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <Server> <BEA-002613> <チャネル"DefaultSecure[6]" は、現在0:0:0:0:0:0:0:1: 7002でプロトコルiiops, t3s, ldaps, httpsをリスニングしています。>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <Server> <BEA-002613> <チャネル"DefaultSecure[1]" は、現在192.168.251.62: 7002でプロトコルiiops, t3s, ldaps, httpsをリスニングしています。>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <Server> <BEA-002613> <チャネル"Default[1]"は、現 在192.168.251.62: 7001でプロトコルiiop, t3, ldap, snmp, httpをリスニングしています。>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <Server> <BEA-002613> <チャネル"Default[6]"は、現 在0:0:0:0:0:0:0:1: 7001でプロトコルiiop, t3, ldap, snmp, httpをリスニングしています。>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <Server> <BEA-002613> <チャネル"Default[2]"は、現 在192.168.122.1: 7001でプロトコルiiop, t3, ldap, snmp, httpをリスニングしています。>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <WebLogicServer> <BEA-000329> <ドメイン"base_domain"でWebLogic管理サーバー"AdminServer"を本番モードで起動しました>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <WebLogicServer> <BEA-000365> <サーバー状態がRUNNINGに変化しました>
 8月 02 18:42:53 testcnt07 startWebLogic.sh[20838]: <2017/08/02 18時42分53秒 JST> <Notice> <WebLogicServer> <BEA-000360> <サーバーがRUNNINGモードで起動しました>

 

 

【補足】WebLogic のログはどこにあるのか?

WebLogic のログは本環境では以下のディレクトリにあります。

※上記で確認した「systemctl status weblogic -l」のログよりも詳細なログが確認できます。

/home/weblogic/wls12212/user_projects/domains/base_domain/servers/AdminServer/logs/AdminServer.log

 

 

まとめ

起動スクリプトを作成することで各サービスがどのように起動しているのかイメージできたと思います。

CentOS 7 になり systemd を利用することになり、シンプルではなくなりましたが、細かくサービスの動作を指定できるようになりました。

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。