mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-06-27 04:22:05 +00:00
202 lines
5.3 KiB
Bash
202 lines
5.3 KiB
Bash
#!/usr/bin/env bash
|
|
# Copyright 2021 Collate
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# Home Dir
|
|
base_dir=$(dirname $0)/..
|
|
|
|
CATALOG_HOME=$base_dirbase_dir=$(dirname $0)/..
|
|
|
|
CATALOG_HOME=$base_dir
|
|
PID_DIR=$base_dir/logs
|
|
LOG_DIR=$base_dir/logs
|
|
mkdir -p $LOG_DIR
|
|
|
|
[ -z $MAX_WAIT_TIME ] && MAX_WAIT_TIME=120
|
|
|
|
# OpenMetadata env script
|
|
. $CATALOG_HOME/conf/openmetadata-env.sh
|
|
|
|
function catalogStart {
|
|
catalogStatus -q
|
|
if [[ $? -eq 0 ]]; then
|
|
rm -f ${PID_FILE}
|
|
echo "Starting OpenMetadata"
|
|
APP_CLASS="org.openmetadata.service.OpenMetadataApplication"
|
|
cd ${CATALOG_HOME}
|
|
nohup ${JAVA} ${CATALOG_HEAP_OPTS} ${CATALOG_JVM_PERF_OPTS} ${CATALOG_DEBUG_OPTS} ${CATALOG_GC_LOG_OPTS} ${CATALOG_JMX_OPTS} -cp ${CLASSPATH} "${APP_CLASS}" "server" "$@" 2>>"${ERR_FILE}" 1>>"${OUT_FILE}" &
|
|
cd - &> /dev/null
|
|
echo $! > ${PID_FILE}
|
|
echo $(catalogStatus)
|
|
else
|
|
echo "OpenMetadata already running with PID: ${PID}"
|
|
fi
|
|
}
|
|
|
|
function catalogStop {
|
|
catalogStatus -q
|
|
if [[ $? -eq 1 ]]; then
|
|
echo "Stopping OpenMetadata [${PID}] "
|
|
kill -s KILL ${PID} 1>>"${OUT_FILE}" 2>>"${ERR_FILE}"
|
|
else
|
|
echo "OpenMetadata not running"
|
|
fi
|
|
}
|
|
|
|
function catalogStatus {
|
|
local verbose=1
|
|
while true; do
|
|
case ${1} in
|
|
-q) verbose=0; shift;;
|
|
*) break;;
|
|
esac
|
|
done
|
|
|
|
getPID
|
|
if [[ $? -eq 1 ]] || [[ ${PID} -eq 0 ]]; then
|
|
[[ "${verbose}" -eq 1 ]] && echo "OpenMetadata not running."
|
|
return 0
|
|
fi
|
|
|
|
ps -p ${PID} > /dev/null
|
|
if [[ $? -eq 0 ]]; then
|
|
[[ "${verbose}" -eq 1 ]] && echo "OpenMetadata running with PID=${PID}."
|
|
return 1
|
|
else
|
|
[[ "${verbose}" -eq 1 ]] && echo "OpenMetadata not running."
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
# Removes the PID file if OpenMetadata is not running
|
|
function catalogClean {
|
|
catalogStatus -q
|
|
if [[ $? -eq 0 ]]; then
|
|
rm -f ${PID_FILE} ${OUT_FILE} ${ERR_FILE}
|
|
echo "Removed the ${PID_FILE}, ${OUT_FILE} and ${ERR_FILE} files."
|
|
else
|
|
echo "Can't clean files. OpenMetadata running with PID=${PID}."
|
|
fi
|
|
}
|
|
|
|
# Returns 0 if the OpenMetadata is running and sets the $PID variable.
|
|
function getPID {
|
|
if [ ! -d $PID_DIR ]; then
|
|
printf "Can't find pid dir.\n"
|
|
exit 1
|
|
fi
|
|
if [ ! -f $PID_FILE ]; then
|
|
PID=0
|
|
return 1
|
|
fi
|
|
|
|
PID="$(<$PID_FILE)"
|
|
return 0
|
|
}
|
|
|
|
# Home Dir
|
|
base_dir=$(dirname $0)/..
|
|
cd $base_dir && base_dir=`pwd` && cd - &> /dev/null
|
|
|
|
# App name
|
|
APP_NAME=catalog
|
|
|
|
#if CATALOG_DIR is not set its a dev env.
|
|
if [ "x$CATALOG_DIR" != "x" ]; then
|
|
CATALOG_HOME=$CATALOG_DIR/$APP_NAME
|
|
else
|
|
CATALOG_HOME=$base_dir
|
|
PID_DIR=$CATALOG_HOME/logs
|
|
LOG_DIR=$CATALOG_HOME/logs
|
|
mkdir -p $LOG_DIR
|
|
fi
|
|
|
|
# CATALOG env script
|
|
. ${CATALOG_HOME}/conf/openmetadata-env.sh
|
|
|
|
PID=0
|
|
|
|
[ -z $PID_DIR ] && PID_DIR="/var/run/$APP_NAME"
|
|
[ -z $LOG_DIR ] && LOG_DIR="/var/log/$APP_NAME"
|
|
|
|
# Name of PID, OUT and ERR files
|
|
PID_FILE="${PID_DIR}/${APP_NAME}.pid"
|
|
OUT_FILE="${LOG_DIR}/${APP_NAME}.log"
|
|
ERR_FILE="${LOG_DIR}/${APP_NAME}.err"
|
|
|
|
CLASSPATH=${CLASSPATH}:/etc/catalog/conf
|
|
|
|
# classpath addition for release
|
|
for file in ${CATALOG_HOME}/libs/*.jar;
|
|
do
|
|
CLASSPATH=${CLASSPATH}:${file}
|
|
done
|
|
|
|
# Which java to use
|
|
if [[ -z "${JAVA_HOME}" ]]; then
|
|
JAVA="java"
|
|
else
|
|
JAVA="${JAVA_HOME}/bin/java"
|
|
fi
|
|
|
|
if [[ "x${CATALOG_HEAP_OPTS}" = "x" ]]; then
|
|
export CATALOG_HEAP_OPTS="-Xmx2G -Xms2G"
|
|
fi
|
|
|
|
# JVM performance options
|
|
if [[ -z "${CATALOG_JVM_PERF_OPTS}" ]]; then
|
|
CATALOG_JVM_PERF_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true"
|
|
fi
|
|
|
|
|
|
# JMX settings
|
|
if [ -z "$CATALOG_JMX_OPTS" ]; then
|
|
CATALOG_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false "
|
|
fi
|
|
|
|
# JMX port to use
|
|
if [ $JMX_PORT ]; then
|
|
CATALOG_JMX_OPTS="$CATALOG_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
|
|
fi
|
|
|
|
# GC options
|
|
GC_LOG_FILE_NAME='CATALOG-gc.log'
|
|
if [ -z "$CATALOG_GC_LOG_OPTS" ]; then
|
|
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')
|
|
if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then
|
|
CATALOG_GC_LOG_OPTS="-Xlog:gc*:file=$LOG_DIR/$GC_LOG_FILE_NAME:time,tags:filecount=10,filesize=102400"
|
|
else
|
|
CATALOG_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
|
|
fi
|
|
fi
|
|
|
|
option="$1"
|
|
shift
|
|
case "${option}" in
|
|
start)
|
|
conf="$CATALOG_HOME/conf/openmetadata.yaml"
|
|
if [[ $# -eq 1 ]]; then conf="${1}"; fi
|
|
catalogStart "${conf}"
|
|
;;
|
|
stop)
|
|
catalogStop
|
|
;;
|
|
status)
|
|
catalogStatus
|
|
;;
|
|
clean)
|
|
catalogClean
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|status|clean}"
|
|
;;
|
|
esac
|