Tomcat上で起動しているサービスを個別に起動/停止する

Pocket

・開始コマンド
curl -u test:test http://localhost:8080/host-manager/text/start?name=www.awesomeserver.com

・終了コマンド
curl -u test:test http://localhost:8080/host-manager/text/stop?name=www.awesomeserver.com

しかし、残念ながら、curlはインストールされいません。
既に稼働中のシステムなので、新たなアプリケーションのインストールをせずに今環境で利用できるもので勝負です。

お次は、Windows Powershellで使えそうなコマンドを調査します。

httpのリクエストを発行できるコマンドとしてInvoke-WebRequestがありました。

さて、Invoke-WebRequestですが、引数が多いです。

とりあえず、Windows Powershellで下記のコマンドを実行してみます。

$url = http://localhost:8080/host-manager/text/start?name=www.awesomeserver.com
Invoke-WebRequest -Uri $uri

残念ながらエラーとなりました。

Invoke-WebRequestの”-Authentication”オプションを参照するとBASIC認証では”-Credential”オプションを指定する必要がありそうです。

「Host Manager App — Text Interface」の「Configuring Manager Application Access」を参照すると、TomcatのManagerアプリケーションを使用する際にTomcatのユーザ認証が必要であることが解ります。

さらに${CATALINA_BASE}/conf/tomcat-users.xml に「admin-script」権限を付与したユーザを追加しておく必要があります。

停止用のバッチファイルTomcatStartStop.batは、下記のようになりました。

SET USER=%1
SET PASS=%2
SET APP=%3
SET OPE=%4

powershell -ExecutionPolicy RemoteSigned -Command .\TomcatStartStop.ps1 %USER %PASS %APP %OPE ; exit $LASTEXITCOD"
SET EXIT_CODE=%ERRORLEVEL%

IF %EXIT_CODE%==9 GOTO END
CALL :ERRORCHECK
GOTO END

:ERRORCHECK
IF NOT %EXIT_CODE%==0 (
    SET EXIT_CODE=9
}
EXIT /B

:END
EXIT /B %EXIT_CODE%

呼び出しているWindows Powershellのスクリプト(TomcatStartStop.ps1)は下記の通り。

Param( $user, $pass, $app, $ope )

$secpassword = ConvertTo-SecureString $pass - AsPlainText -Force 
$cred = New-Object System.Management.Automation.PSCredential($user, $secpassword)
$uri = "http://localhost:8080/manager/text/" + $ope + " ?path=/" + $app

Invoke-WebRequest -Uri $uri -Credential $cred 2>&1
if ($?) {
    write-host "正常終了"
    exit 0
} else {
    write-host "異常終了"
    exit 9
}

コマンドの実行は下記のようになります。

.\TomcatStartStop.bat [Tomcat User] [password] [Web application] [start/stop]
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA