OpenMetadata/bin/openmetadata.sh
2022-09-17 11:35:45 -07:00

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