2 Commits

Author SHA1 Message Date
许晓东
f0369c6246 优化linux启停脚本 2025-08-06 20:21:02 +08:00
许晓东
0027f55184 windows启动脚本支持任意路径,增加PowerShell启动脚本. 2025-07-30 20:57:56 +08:00
6 changed files with 174 additions and 28 deletions

View File

@@ -34,7 +34,7 @@ github下载慢也可以试试从gitee下载点击下载[gitee来源kafka-con
## 快速使用
### Windows
1. 解压缩zip安装包
2. 进入bin目录必须在bin目录下双击执行`start.bat`启动
2. 进入bin目录, 双击执行`start.bat`启动; 如果使用PowerShell, 也可以选择运行`start.ps1`启动
3. 停止:直接关闭启动的命令行窗口即可
### Linux或Mac OS

View File

@@ -23,6 +23,7 @@
<includes>
<include>*.sh</include>
<include>*.bat</include>
<include>*.ps1</include>
</includes>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>

View File

@@ -1,13 +1,61 @@
#!/bin/bash
PREFIX='./'
CMD=$0
if [[ $CMD == $PREFIX* ]]; then
CMD=${CMD:2}
# 获取脚本真实路径兼容Linux和macOS
if [ -L "$0" ]; then
# 处理符号链接
if command -v greadlink >/dev/null 2>&1; then
SCRIPT_PATH=$(greadlink -f "$0")
elif command -v readlink >/dev/null 2>&1; then
SCRIPT_PATH=$(readlink -f "$0")
else
# 使用perl作为备选
SCRIPT_PATH=$(perl -e 'use Cwd "abs_path"; print abs_path(shift)' "$0" 2>/dev/null)
fi
else
SCRIPT_PATH="$0"
fi
SCRIPT_DIR=$(dirname "`pwd`/$CMD")
PROJECT_DIR=`dirname "$SCRIPT_DIR"`
# 最终回退方案
if [ -z "$SCRIPT_PATH" ] || [ ! -f "$SCRIPT_PATH" ]; then
SCRIPT_PATH="$0"
fi
# 计算项目根目录
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
PROJECT_DIR=$(cd "$SCRIPT_DIR" && cd .. && pwd 2>/dev/null)
# 验证项目目录是否存在
if [ ! -d "$PROJECT_DIR" ]; then
echo "ERROR: Failed to determine project directory!" >&2
exit 1
fi
# 不要修改进程标记,作为进程属性关闭使用
PROCESS_FLAG="kafka-console-ui-process-flag:${PROJECT_DIR}"
pkill -f $PROCESS_FLAG
echo 'Stop Kafka-console-ui!'
# 停止前检查进程是否存在
if pgrep -f "$PROCESS_FLAG" >/dev/null; then
# 先尝试正常停止
pkill -f "$PROCESS_FLAG"
# 等待进程退出
TIMEOUT=10
while [ $TIMEOUT -gt 0 ]; do
if ! pgrep -f "$PROCESS_FLAG" >/dev/null; then
break
fi
sleep 1
TIMEOUT=$((TIMEOUT - 1))
done
# 检查是否仍有进程存在
if pgrep -f "$PROCESS_FLAG" >/dev/null; then
# 强制终止
pkill -9 -f "$PROCESS_FLAG"
echo "Stop Kafka-console-ui! (force killed)"
else
echo "Stop Kafka-console-ui! (gracefully stopped)"
fi
else
echo "Kafka-console-ui is not running."
fi

View File

@@ -1,8 +1,38 @@
@echo off
rem MAIN_CLASS=org.springframework.boot.loader.JarLauncher
rem JAVA_HOME=jre1.8.0_66
set JAVA_CMD=%JAVA_HOME%\bin\java
set JAVA_OPTS=-Xmx512m -Xms512m -Xmn256m -Xss256k -Dfile.encoding=utf-8
set CONFIG_FILE=../config/application.yml
set TARGET=../lib/kafka-console-ui.jar
set DATA_DIR=..
"%JAVA_CMD%" -jar %TARGET% --spring.config.location=%CONFIG_FILE% --data.dir=%DATA_DIR%
setlocal enabledelayedexpansion
set "BIN_DIR=%~dp0"
if not "%BIN_DIR:~-1%"=="\" set "BIN_DIR=%BIN_DIR%\"
set "BASE_DIR=%BIN_DIR%.."
for %%I in ("%BASE_DIR%") do set "BASE_DIR=%%~fI"
if defined JAVA_HOME (
set "JAVA_CMD=%JAVA_HOME%\bin\java"
) else (
echo ERROR: JAVA_HOME is not defined
exit /b 1
)
set "JAVA_OPTS=-Xmx512m -Xms512m -Xmn256m -Xss256k -Dfile.encoding=utf-8"
set "CONFIG_FILE=%BASE_DIR%\config\application.yml"
set "TARGET=%BASE_DIR%\lib\kafka-console-ui.jar"
set "DATA_DIR=%BASE_DIR%"
set "LOG_HOME=%BASE_DIR%"
if not exist "%TARGET%" (
echo ERROR: Jar file not found at [%TARGET%]
exit /b 1
)
if not exist "%CONFIG_FILE%" (
echo WARNING: Config file not found at [%CONFIG_FILE%]
)
"%JAVA_CMD%" %JAVA_OPTS% -jar "%TARGET%" --spring.config.location="%CONFIG_FILE%" --data.dir="%DATA_DIR%" --logging.home="%LOG_HOME%"
endlocal

41
bin/start.ps1 Normal file
View File

@@ -0,0 +1,41 @@
# PowerShell
# Set the script execution policy. If necessary, execute this command in PowerShell and then run the script.
# Set-ExecutionPolicy Bypass -Scope Process -Force
param()
$BIN_DIR = $PSScriptRoot
if (-not $BIN_DIR.EndsWith('\')) {
$BIN_DIR += '\'
}
$BASE_DIR = (Get-Item (Join-Path $BIN_DIR "..")).FullName
if (-not $env:JAVA_HOME) {
Write-Error "ERROR: JAVA_HOME is not defined"
exit 1
}
$JAVA_OPTS = "-Xmx512m -Xms512m -Xmn256m -Xss256k -Dfile.encoding=utf-8"
$CONFIG_FILE = Join-Path $BASE_DIR "config\application.yml"
$TARGET = Join-Path $BASE_DIR "lib\kafka-console-ui.jar"
$DATA_DIR = $BASE_DIR
$LOG_HOME = $BASE_DIR
if (-not (Test-Path $TARGET -PathType Leaf)) {
Write-Error "ERROR: Jar file not found at [$TARGET]"
exit 1
}
if (-not (Test-Path $CONFIG_FILE -PathType Leaf)) {
Write-Warning "WARNING: Config file not found at [$CONFIG_FILE]"
}
$javaCmd = Join-Path $env:JAVA_HOME "bin\java.exe"
& $javaCmd $JAVA_OPTS.Split() `
-jar $TARGET `
"--spring.config.location=$CONFIG_FILE" `
"--data.dir=$DATA_DIR" `
"--logging.home=$LOG_HOME"

View File

@@ -1,29 +1,55 @@
#!/bin/bash
# 设置jvm堆大小及栈大小栈大小最少设置为256K不要小于这个值比如设置为128太小了
# 设置jvm堆大小及栈大小
JAVA_MEM_OPTS="-Xmx512m -Xms512m -Xmn256m -Xss256k"
PREFIX='./'
CMD=$0
if [[ $CMD == $PREFIX* ]]; then
CMD=${CMD:2}
# 获取脚本真实路径兼容Linux和macOS
if [ -L "$0" ]; then
# 处理符号链接
if command -v greadlink >/dev/null 2>&1; then
# macOS使用greadlink需brew install coreutils
SCRIPT_PATH=$(greadlink -f "$0")
else
# Linux使用readlink
SCRIPT_PATH=$(readlink -f "$0")
fi
else
SCRIPT_PATH="$0"
fi
SCRIPT_DIR=$(dirname "`pwd`/$CMD")
PROJECT_DIR=`dirname "$SCRIPT_DIR"`
# 如果上述方法失败如macOS无greadlink使用替代方案
if [ -z "$SCRIPT_PATH" ] || [ ! -f "$SCRIPT_PATH" ]; then
# 使用perl跨平台解决方案
SCRIPT_PATH=$(perl -e 'use Cwd "abs_path"; print abs_path(shift)' "$0" 2>/dev/null)
fi
# 最终回退方案
if [ -z "$SCRIPT_PATH" ] || [ ! -f "$SCRIPT_PATH" ]; then
SCRIPT_PATH="$0"
fi
# 计算项目根目录
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
PROJECT_DIR=$(cd "$SCRIPT_DIR" && cd .. && pwd)
CONF_FILE="$PROJECT_DIR/config/application.yml"
TARGET="$PROJECT_DIR/lib/kafka-console-ui.jar"
#设置h2文件根目录
DATA_DIR=$PROJECT_DIR
# 设置h2文件根目录
DATA_DIR="$PROJECT_DIR"
# 日志目录,默认为当前工程目录下
# 这个是错误输出如果启动命令有误输出到这个文件应用日志不会输出到error.out应用日志输出到上面的kafka-console-ui.log中
ERROR_OUT="$PROJECT_DIR/error.out"
# 不要修改进程标记作为进程属性关闭使用如果要修改请把shutdown.sh里的该属性的值保持一致
# 日志目录
LOG_HOME="$PROJECT_DIR"
PROCESS_FLAG="kafka-console-ui-process-flag:${PROJECT_DIR}"
JAVA_OPTS="$JAVA_OPTS $JAVA_MEM_OPTS -Dfile.encoding=utf-8"
nohup java -jar $JAVA_OPTS $TARGET --spring.config.location="$CONF_FILE" --logging.home="$PROJECT_DIR" --data.dir=$DATA_DIR $PROCESS_FLAG 1>/dev/null 2>$ERROR_OUT &
# 启动应用
nohup java -jar $JAVA_OPTS "$TARGET" \
--spring.config.location="$CONF_FILE" \
--logging.home="$LOG_HOME" \
--data.dir="$DATA_DIR" \
"$PROCESS_FLAG" >/dev/null 2>"$ERROR_OUT" &
echo "Kafka-console-ui Started!"
echo "Kafka-console-ui Started! PID: $!"