Add File
This commit is contained in:
210
installer/sctl
Normal file
210
installer/sctl
Normal file
@@ -0,0 +1,210 @@
|
||||
#!/bin/bash
|
||||
action=$1
|
||||
target=$2
|
||||
|
||||
SQLBOT_BASE=/opt
|
||||
SQLBOT_RUNNING_BASE=${SQLBOT_BASE}/sqlbot
|
||||
SQLBOT_LOG_PATH=${SQLBOT_RUNNING_BASE}/data/sqlbot/logs
|
||||
compose_files="-f docker-compose.yml"
|
||||
compose_cmd="docker-compose"
|
||||
current_version=""
|
||||
|
||||
set -a
|
||||
source ${SQLBOT_RUNNING_BASE}/.env
|
||||
set +a
|
||||
export COMPOSE_HTTP_TIMEOUT=180
|
||||
|
||||
docker-compose version >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
docker compose version >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
compose_cmd="docker compose"
|
||||
fi
|
||||
fi
|
||||
|
||||
#if [[ ! ${SQLBOT_EXTERNAL_DB} ]] || [ "${SQLBOT_EXTERNAL_DB}" = "false" ]; then
|
||||
# compose_files="${compose_files} -f docker-compose-pg.yml"
|
||||
#fi
|
||||
|
||||
function usage() {
|
||||
echo "SQLBot 控制脚本"
|
||||
echo
|
||||
echo "Usage: "
|
||||
echo " ./sctl [COMMAND] [ARGS...]"
|
||||
echo " ./sctl --help"
|
||||
echo
|
||||
echo "Commands: "
|
||||
echo " status 查看 SQLBot 服务运行状态"
|
||||
echo " start 启动 SQLBot 服务"
|
||||
echo " stop 停止 SQLBot 服务"
|
||||
echo " restart 重启 SQLBot 服务"
|
||||
echo " reload 重载 SQLBot 服务"
|
||||
echo " clear-images 清理 SQLBot 旧版本的相关镜像"
|
||||
echo " clear-logs 清理 SQLBot 历史日志"
|
||||
echo " version 查看 SQLBot 版本"
|
||||
}
|
||||
|
||||
function _healthcheck() {
|
||||
echo
|
||||
container_name=$(grep "container_name" $SQLBOT_RUNNING_BASE/docker-compose.yml | awk -F': ' '{print $2}')
|
||||
sleep 1
|
||||
if [ -z '$(docker ps --filter "name=^$container_name$" -q)' ];then
|
||||
echo "未找到容器 $container_name。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for b in {1..90}
|
||||
do
|
||||
sleep 1
|
||||
read status healthy<<<$(docker inspect $container_name --format '{{.State.Status}} {{.State.Health.Status}}')
|
||||
if [[ "$healthy" == "starting" ]];then
|
||||
printf "\rSQLBot 服务状态 : 正在启动 ... %3ds" $b
|
||||
elif [[ "$status" == "running" ]] && [[ "$healthy" == "healthy" ]];then
|
||||
printf "\rSQLBot 服务状态 : 正常运行 "
|
||||
echo
|
||||
return;
|
||||
else
|
||||
echo
|
||||
echo -e "SQLBot 服务状态 : \033[31m无法访问\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo
|
||||
echo "【警告】服务在等待时间内未完全启动!请稍后使用 sctl status 检查服务运行状况。"
|
||||
echo
|
||||
}
|
||||
function _get_current_version() {
|
||||
sqlbot_current_version=$(grep "^ image:.*sqlbot:" ${SQLBOT_RUNNING_BASE}/docker-compose.yml | awk -F'sqlbot:' '{print $2}')
|
||||
if test -z $sqlbot_current_version; then
|
||||
echo "获取当前版本失败,请检查当前版本是否正确"
|
||||
exit 1
|
||||
fi
|
||||
current_version=$sqlbot_current_version
|
||||
}
|
||||
|
||||
function status() {
|
||||
echo
|
||||
echo "SQLBot 容器运行状态"
|
||||
cd ${SQLBOT_RUNNING_BASE}
|
||||
${compose_cmd} ${compose_files} ps
|
||||
|
||||
echo
|
||||
docker_root_dir=$(docker info | grep "Docker Root Dir" | awk -F': ' '{print $2}')
|
||||
echo "Docker 目录及文件大小 : "
|
||||
du -sh $docker_root_dir
|
||||
echo
|
||||
echo "Docker 目录所在磁盘使用情况 : "
|
||||
df -H $docker_root_dir
|
||||
|
||||
echo
|
||||
echo "日志文件大小 : "
|
||||
du -Sh ${SQLBOT_RUNNING_BASE}/logs/
|
||||
|
||||
echo
|
||||
echo "SQLBot 运行目录及文件大小 : "
|
||||
du -sh ${SQLBOT_BASE}
|
||||
echo
|
||||
echo "SQLBot 运行目录使用情况 : "
|
||||
df -H ${SQLBOT_BASE}
|
||||
|
||||
_healthcheck
|
||||
}
|
||||
function start() {
|
||||
echo
|
||||
cd ${SQLBOT_RUNNING_BASE}
|
||||
${compose_cmd} ${compose_files} up -d
|
||||
_healthcheck
|
||||
}
|
||||
function stop() {
|
||||
echo
|
||||
cd ${SQLBOT_RUNNING_BASE}
|
||||
${compose_cmd} ${compose_files} down -v ${target}
|
||||
}
|
||||
function restart() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
function reload() {
|
||||
start
|
||||
}
|
||||
function version() {
|
||||
echo
|
||||
_get_current_version
|
||||
echo "current version is $current_version"
|
||||
}
|
||||
function clear_images() {
|
||||
echo
|
||||
for f in $SQLBOT_RUNNING_BASE/*.yml; do
|
||||
[[ -e "$f" ]] || break
|
||||
grep "^ image:.*:" "$f" | uniq | while read -r component_image_defined; do
|
||||
component_version=$(echo ${component_image_defined} | awk -F":" '{print $3}' | uniq)
|
||||
component_image=$(echo ${component_image_defined} | awk -F'image: ' '{print $2}' | awk -F':' '{print $1}')
|
||||
|
||||
if [[ $(docker images | grep "$component_image[[:space:]]" | grep -v " $component_version " | wc -l) == 0 ]]; then
|
||||
echo "$component_image 不存在旧版本镜像"
|
||||
else
|
||||
echo "存在非当前版本镜像 : "
|
||||
docker images | grep "$component_image[[:space:]]" | grep -v " $component_version "
|
||||
echo "清理${component}镜像"
|
||||
docker rmi $(docker images | grep "$component_image[[:space:]]" | grep -v " $component_version " | awk -F' ' '{print $1":"$2}')
|
||||
echo "清理完毕"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
if [ $(docker images -f dangling=true -q | wc -l) -gt 0 ]; then
|
||||
echo "清理虚悬镜像"
|
||||
docker rmi $(docker images -f dangling=true -q)
|
||||
echo "清理完毕"
|
||||
fi
|
||||
}
|
||||
function clear_logs() {
|
||||
echo "开始清理 SQLBot 历史日志"
|
||||
rm -rf ${SQLBOT_LOG_PATH}/*.*.*
|
||||
echo "" > ${SQLBOT_LOG_PATH}/info.log
|
||||
echo "" > ${SQLBOT_LOG_PATH}/debug.log
|
||||
echo "" > ${SQLBOT_LOG_PATH}/error.log
|
||||
echo "清理完毕"
|
||||
}
|
||||
|
||||
function main() {
|
||||
case "${action}" in
|
||||
status)
|
||||
status
|
||||
;;
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
restart)
|
||||
restart
|
||||
;;
|
||||
reload)
|
||||
reload
|
||||
;;
|
||||
clear-images)
|
||||
clear_images
|
||||
;;
|
||||
clear-logs)
|
||||
clear_logs
|
||||
;;
|
||||
version)
|
||||
version
|
||||
;;
|
||||
help)
|
||||
usage
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
"")
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "不支持的参数,请使用 help 或 --help 参数获取帮助"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
main
|
||||
Reference in New Issue
Block a user