zipkin启动脚本并指定mysql数据存储
#!/bin/bash
# 配置部分 #############################################################
# Zipkin JAR 文件的名称
# 这里指定了 Zipkin 的可执行 JAR 文件,确保该文件在当前目录中可用。
ZIPKIN_JAR="zipkin-server-2.23.2-exec.jar"
# PID 文件的位置
# 该文件用于存储运行中 Zipkin 进程的 PID (Process ID)。用于后续检查进程是否在运行,或停止它。
ZIPKIN_PID_FILE="zipkin.pid"
# 日志文件的位置
# Zipkin 的日志输出将被重定向到此文件中。
ZIPKIN_LOG_FILE="zipkin.log"
# MySQL 配置 #############################################################
# Zipkin 的存储类型,指定为 MySQL
STORAGE_TYPE="mysql"
# MySQL 数据库的连接主机,使用阿里云的 MySQL RDS 地址
MYSQL_HOST="rm-xx.mysql.rds.aliyuncs.com"
# MySQL 数据库的用户名
MYSQL_USER="root"
# MySQL 数据库的密码
MYSQL_PASS="123456"
# MySQL 数据库的名称
MYSQL_DB="zipkin"
# 启动 Zipkin 的命令 #####################################################
# 指定时区 Asia/Shanghai 及使用 MySQL 存储
# 该函数用于启动 Zipkin,使用指定的存储设置 (MySQL) 和时区 (Asia/Shanghai)。
start_zipkin() {
# 使用 nohup 命令后台启动 Zipkin,避免其受到终端关闭的影响。
# -Duser.timezone=Asia/Shanghai 用于指定 Zipkin 进程的时区为中国标准时间 (UTC+8)。
nohup java -Duser.timezone=Asia/Shanghai -jar $ZIPKIN_JAR \
--STORAGE_TYPE=$STORAGE_TYPE \
--MYSQL_HOST=$MYSQL_HOST \
--MYSQL_USER=$MYSQL_USER \
--MYSQL_PASS=$MYSQL_PASS \
--MYSQL_DB=$MYSQL_DB \
> $ZIPKIN_LOG_FILE 2>&1 &
# 获取启动的进程 ID,并存入 PID 文件
# 使用 `$!` 获取最后一个后台进程的 PID,并将其写入到 PID 文件中,以便后续使用。
echo $! > $ZIPKIN_PID_FILE
echo "Zipkin started with PID $(cat $ZIPKIN_PID_FILE)"
}
# 停止 Zipkin 的命令 #####################################################
# 该函数用于停止运行中的 Zipkin 进程。
stop_zipkin() {
# 检查 PID 文件是否存在,确保 Zipkin 进程正在运行
if [ -f "$ZIPKIN_PID_FILE" ]; then
# 读取 PID 文件中的进程 ID
PID=$(cat $ZIPKIN_PID_FILE)
# 检查该进程是否正在运行
if ps -p $PID > /dev/null 2>&1; then
echo "Stopping Zipkin (PID: $PID)..."
# 尝试正常停止进程
kill $PID
sleep 5 # 等待 5 秒钟,确保进程有时间正常停止
# 再次检查进程是否仍在运行
if ps -p $PID > /dev/null 2>&1; then
echo "Failed to stop Zipkin. Force killing it..."
# 如果进程未停止,则强制终止进程
kill -9 $PID
fi
# 删除 PID 文件,表示 Zipkin 已停止
rm -f $ZIPKIN_PID_FILE
echo "Zipkin stopped."
else
echo "Zipkin is not running, but PID file exists. Cleaning up..."
# 如果进程不存在但 PID 文件存在,清理无效的 PID 文件
rm -f $ZIPKIN_PID_FILE
fi
else
echo "No PID file found. Zipkin may not be running."
fi
}
# 检查 Zipkin 是否在运行 ##################################################
# 该函数用于检查 Zipkin 是否正在运行。
is_running() {
# 检查 PID 文件是否存在
if [ -f "$ZIPKIN_PID_FILE" ]; then
# 读取 PID 文件中的进程 ID
PID=$(cat $ZIPKIN_PID_FILE)
# 检查该进程是否正在运行
if ps -p $PID > /dev/null 2>&1; then
return 0 # 返回 0 表示进程正在运行
else
return 1 # 返回 1 表示 PID 文件存在但进程不在运行
fi
else
return 1 # 返回 1 表示没有 PID 文件,认为 Zipkin 未运行
fi
}
# 主逻辑 #################################################################
# 该部分是脚本的主逻辑,控制 Zipkin 的启动和停止操作。
# 首先检查 Zipkin 是否在运行
if is_running; then
# 如果 Zipkin 正在运行,先停止它
echo "Zipkin is already running. Stopping it first..."
stop_zipkin
fi
# 启动 Zipkin
echo "Starting Zipkin..."
start_zipkin
脚本说明
1. 配置部分
ZIPKIN_JAR
:指定Zipkin
的可执行JAR
文件,确保该文件在当前工作目录中存在。ZIPKIN_PID_FILE
:存储Zipkin
进程的PID
,用于停止或检查进程是否在运行。ZIPKIN_LOG_FILE
:指定Zipkin
运行日志的输出文件路径。STORAGE_TYPE
、MYSQL_HOST
、MYSQL_USER
、MYSQL_PASS
、MYSQL_DB
:用于配置Zipkin
的存储后端为MySQL
,并提供连接信息。
2. 启动 Zipkin (start_zipkin
函数)
- 该函数用于启动
Zipkin
,并将其日志输出到指定的日志文件中,同时将进程的PID
存储到PID
文件中。- 通过
-Duser.timezone=Asia/Shanghai
,指定了Zipkin
运行的时区为Asia/Shanghai
(中国标准时间,UTC+8)。- 使用
nohup
命令确保Zipkin
在后台运行,即使终端关闭也不会影响Zipkin
的运行。
3. 停止 Zipkin (stop_zipkin
函数)
- 该函数用于停止
Zipkin
进程。- 它首先检查
PID
文件是否存在,如果存在则读取PID
并检查进程是否在运行。- 如果进程正在运行,首先尝试正常停止它。如果在 5 秒内未能停止进程,则使用
kill -9
强制终止进程。- 完成后,删除
PID
文件。
4. 检查 Zipkin 是否在运行 (is_running
函数)
- 该函数通过检查
PID
文件是否存在,并验证PID
对应的进程是否在运行,来判断Zipkin
是否正在运行。- 如果进程正在运行,返回
0
;否则返回1
。
5. 主逻辑
- 主逻辑首先调用
is_running
函数,检查Zipkin
是否在运行。- 如果
Zipkin
正在运行,先调用stop_zipkin
函数停止它。- 最后调用
start_zipkin
函数启动Zipkin
。
使用说明
-
保存脚本:
将上面的脚本保存为zipkin_control.sh
,并赋予可执行权限:chmod +x zipkin_control.sh
-
启动或重启 Zipkin:
运行脚本时,它会先检查Zipkin
是否正在运行。如果正在运行,则停止它,然后重新启动。
./zipkin_control.sh
-
日志查看:
你可以通过查看zipkin.log
文件来监控Zipkin
的输出日志:tail -f zipkin.log
总结
- 该脚本自动处理
Zipkin
的启动和停止操作,并记录日志和进程信息。 - 通过使用
PID
文件,可以确保脚本能正确识别并管理Zipkin
进程。 - 通过
-Duser.timezone
参数,设置了Zipkin
的时区,确保日志输出符合指定时区。 - 启动成功查看地址:http://127.0.0.1:9411/ 服务器ip+ 默认端口9411
- 查询启动情况 ps aux | grep zipkin