blob: c1a92d4a4522907c3fee2a7cf300cf957befc39e [file] [log] [blame]
#!/usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
# JAVA_HOME is required.
if [[ -z "$JAVA_HOME" ]]; then
echo -e "\nError: Environment variable JAVA_HOME not set!\n"
exit 1
fi
# global vars
GOBBLIN_VERSION=@project.version@
GOBBLIN_HOME="$(cd `dirname $0`/..; pwd)"
GOBBLIN_LIB=${GOBBLIN_HOME}/lib
GOBBLIN_BIN=${GOBBLIN_HOME}/bin
GOBBLIN_LOGS=${GOBBLIN_HOME}/logs
GOBBLIN_CONF=''
#sourcing basic gobblin env vars like GOBBLIN_HOME and GOBBLIN_LIB
. ${GOBBLIN_BIN}/gobblin-env.sh
CLUSTER_NAME='gobblin_cluster'
JVM_OPTS='-Xmx1g -Xms512m'
USER_JVM_FLAGS=''
LOG4J_FILE_PATH=''
LOG4J_OPTS=''
GOBBLIN_MODE=''
ACTION=''
EXTRA_JARS=''
VERBOSE=0
ENABLE_GC_LOGS=0
CMD_PARAMS=''
LOG_TO_STDOUT=0
# Gobblin Commands, Modes & respective Classes
GOBBLIN_MODE_TYPE=''
CLI='cli'
SERVICE='service'
# Commands
CLASSPATH_CMD='classpath'
# Execution Modes
STANDALONE_MODE='standalone'
CLUSTER_MASTER_MODE='cluster-master'
CLUSTER_WORKER_MODE='cluster-worker'
AWS_MODE='aws'
YARN_MODE='yarn'
MAPREDUCE_MODE='mapreduce'
GOBBLIN_AS_SERVICE_MODE='gobblin-as-service'
GOBBLIN_EXEC_MODE_LIST="$STANDALONE_MODE $CLUSTER_MASTER_MODE $CLUSTER_WORKER_MODE $AWS_MODE $YARN_MODE $MAPREDUCE_MODE $GOBBLIN_AS_SERVICE_MODE"
# CLI Command class
CLI_CLASS='org.apache.gobblin.runtime.cli.GobblinCli'
# Service Class
STANDALONE_CLASS='org.apache.gobblin.scheduler.SchedulerDaemon'
CLUSTER_MASTER_CLASS='org.apache.gobblin.cluster.GobblinClusterManager'
CLUSTER_WORKER_CLASS='org.apache.gobblin.cluster.GobblinTaskRunner'
AWS_CLASS='org.apache.gobblin.aws.GobblinAWSClusterLauncher'
YARN_CLASS='org.apache.gobblin.yarn.GobblinYarnAppLauncher'
MAPREDUCE_CLASS='org.apache.gobblin.runtime.mapreduce.CliMRJobLauncher'
SERVICE_MANAGER_CLASS='org.apache.gobblin.service.modules.core.GobblinServiceManager'
function print_gobblin_usage() {
echo "Usage:"
echo "gobblin.sh cli <cli-command> <params>"
echo "gobblin.sh service <execution-mode> <start|stop|restart|status>"
echo ""
echo "Use \"gobblin <cli|service> --help\" for more information. (Gobblin Version: $GOBBLIN_VERSION)"
}
function print_gobblin_cli_usage() {
echo "Usage: (for Gobblin Version: $GOBBLIN_VERSION)"
echo "gobblin.sh cli <cli-command> <params>"
echo ""
echo "options:"
echo " cli-commands:
passwordManager Encrypt or decrypt strings for the password manager.
decrypt Decryption utilities
run Run a Gobblin application.
config Query the config library
jobs Command line job info and operations
stateMigration Command line tools for migrating state store
job-state-store View and delete job states
cleaner Data retention utility
keystore Examine JCE Keystore files
watermarks Inspect streaming watermarks
job-store-schema-manager Database job history store schema manager
gobblin-classpath shows the constructed gobblin classpath"
echo ""
echo " --conf-dir <gobblin-conf-dir-path> Gobblon config path. default is '\$GOBBLIN_HOME/conf/cli'."
echo " --log4j-conf <path-of-log4j-file> default is '<gobblin-conf-dir-path>/cli/log4j.properties'."
echo " --jvmopts <jvm or gc options> JVM or GC parameters for the java process to append to the default params: \"$JVM_OPTS\"."
echo " --jars <csv list of extra jars> Column-separated list of extra jars to put on the CLASSPATH."
echo " --enable-gc-logs enables gc logs & dumps."
echo " --show-classpath prints gobblin runtime classpath."
echo " --help Display this help."
echo " --verbose Display full command used to start the process."
}
function print_gobblin_service_usage() {
echo "Usage: (for Gobblin Version: $GOBBLIN_VERSION)"
echo "gobblin.sh service <execution-mode> <start|stop|restart|status>"
echo ""
echo "Argument Options:"
echo " <execution-mode> $GOBBLIN_EXEC_MODE_LIST."
echo ""
echo " --conf-dir <gobblin-conf-dir-path> Gobblin config path. default is '\$GOBBLIN_HOME/conf/<execution-mode>'."
echo " --log4j-conf <path-of-log4j-file> default is '<gobblin-conf-dir-path>/<execution-mode>/log4j.properties'."
echo " --jvmopts <jvm or gc options> JVM or GC parameters for the java process to append to the default params: \"$JVM_OPTS\"."
echo " --jars <csv list of extra jars> Column-separated list of extra jars to put on the CLASSPATH."
echo " --enable-gc-logs enables gc logs & dumps."
echo " --show-classpath prints gobblin runtime classpath."
echo " --cluster-name Name of the cluster to be used by helix & other services. ( default: $CLUSTER_NAME)."
echo " --jt <resource manager URL> Only for mapreduce mode: Job submission URL, if not set, taken from \${HADOOP_HOME}/conf."
echo " --fs <file system URL> Only for mapreduce mode: Target file system, if not set, taken from \${HADOOP_HOME}/conf."
echo " --job-conf-file <job-conf-file-path> Only for mapreduce mode: configuration file for the job to run"
echo " --log-to-stdout Outputs to stdout rather than to a log file"
echo " --help Display this help."
echo " --verbose Display full command used to start the process."
}
function print_help_n_exit() {
if [[ "$GOBBLIN_MODE_TYPE" == "$CLI" ]]; then
print_gobblin_cli_usage
elif [[ "$GOBBLIN_MODE_TYPE" == "$SERVICE" ]]; then
print_gobblin_service_usage
else
print_gobblin_usage
fi
exit 1;
}
function die() {
echo -e "\nError: $@\n" 1>&2
exit 1
}
# TODO: use getopts
shopt -s nocasematch
for i in "$@"
do
case "$1" in
"$CLI" )
GOBBLIN_MODE_TYPE=$CLI
GOBBLIN_MODE="$1"
;;
"$SERVICE" )
GOBBLIN_MODE_TYPE=$SERVICE
if [[ " $GOBBLIN_EXEC_MODE_LIST " =~ .*\ $2\ .* ]]; then
GOBBLIN_MODE="$2"
shift
else
echo "ERROR: Service $2 is not supported. Valid services are : $GOBBLIN_EXEC_MODE_LIST"
print_help_n_exit
fi
;;
start | stop | restart | status)
ACTION="$1"
;;
--show-classpath)
CMD_PARAMS='dummy'
GOBBLIN_MODE=$CLI
GOBBLIN_MODE_TYPE=$CLI
GOBBLIN_MODE=$CLASSPATH_CMD
;;
--jvmopts)
USER_JVM_FLAGS="$2"
shift
;;
--conf-dir)
USER_CONF_DIR="$2"
shift
;;
--log4j-conf)
USER_LOG4J_FILE="$2"
shift
;;
--jars)
EXTRA_JARS="$2"
shift
;;
--enable-gc-logs)
ENABLE_GC_LOGS=1
;;
--cluster-name)
CLUSTER_NAME="$2"
shift
;;
--help )
print_help_n_exit
;;
--verbose)
VERBOSE=1
;;
--jt)
JOB_TRACKER_URL="$2"
shift
;;
--fs)
FS_URL="$2"
shift
;;
--job-conf-file)
JOB_CONF_FILE="$2"
shift
;;
--log-to-stdout)
LOG_TO_STDOUT=1
;;
*)
CMD_PARAMS="$CMD_PARAMS $1"
;;
esac
shift
done
# for gobblin commands, the action is always 'start'
if [[ "$GOBBLIN_MODE_TYPE" == "$CLI" ]]; then
ACTION='start'
# print help by default if any of the supported command is not specified
if [[ -z "$GOBBLIN_MODE" || -z "$CMD_PARAMS" ]]; then
echo "ERROR: command parameters are required for $GOBBLIN_MODE"
print_help_n_exit
fi
fi
CHECK_ENV_VARS=false
if [ $ACTION == "start" ] || [ $ACTION == "restart" ]; then
CHECK_ENV_VARS=true
fi
# derived based on input from user, $GOBBLIN_MODE
PID_FILE_NAME=".gobblin-$GOBBLIN_MODE.pid"
PID_FILE="$GOBBLIN_HOME/$PID_FILE_NAME"
# JVM Flags
if [[ -n "$USER_JVM_FLAGS" ]]; then
JVM_OPTS="$JVM_OPTS $USER_JVM_FLAGS"
fi
# gobblin config
if [[ -n "$USER_CONF_DIR" ]]; then
GOBBLIN_CONF=$USER_CONF_DIR
else
GOBBLIN_CONF=${GOBBLIN_HOME}/conf/${GOBBLIN_MODE}
fi
#log4j config file
if [[ -n "$USER_LOG4J_FILE" ]]; then
LOG4J_FILE_PATH=file://${USER_LOG4J_FILE}
LOG4J_OPTS="-Dlog4j.configuration=$LOG4J_FILE_PATH"
#preference to log4j2.xml for log4j2 support
elif [[ -f ${GOBBLIN_CONF}/log4j2.xml ]]; then
LOG4J_FILE_PATH=file://${GOBBLIN_CONF}/log4j2.xml
LOG4J_OPTS="-Dlog4j.configuration=$LOG4J_FILE_PATH"
#prefer log4j.xml
elif [[ -f ${GOBBLIN_CONF}/log4j.xml ]]; then
LOG4J_FILE_PATH=file://${GOBBLIN_CONF}/log4j.xml
LOG4J_OPTS="-Dlog4j.configuration=$LOG4J_FILE_PATH"
#defaults to log4j.properties
elif [[ -f ${GOBBLIN_CONF}/log4j.properties ]]; then
LOG4J_FILE_PATH=file://${GOBBLIN_CONF}/log4j.properties
LOG4J_OPTS="-Dlog4j.configuration=$LOG4J_FILE_PATH"
fi
if [[ ! -d "$GOBBLIN_LOGS" ]]; then
mkdir -p $GOBBLIN_LOGS
fi
GC_OPTS=''
if [[ ${ENABLE_GC_LOGS} -eq 1 ]]; then
GC_OPTS+="-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseCompressedOops "
GC_OPTS+="-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution "
GC_OPTS+="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$GOBBLIN_LOGS/ "
GC_OPTS+="-Xloggc:$GOBBLIN_LOGS/gobblin-$GOBBLIN_MODE-gc.log "
fi
function build_classpath(){
GOBBLIN_CLASSPATH=''
# Build classpth
GOBBLIN_JARS=''
GOBBLIN_HADOOP_JARS=''
GOBBLIN_CLASSPATH=''
GOBBLIN_HADOOP_CLASSPATH=''
for jarFile in ${GOBBLIN_LIB}/*.jar
do
[[ -e "$jarFile" ]] || break # in case there is no jar file
if [[ $jarFile == hadoop* ]]; then
GOBBLIN_HADOOP_JARS=${GOBBLIN_HADOOP_JARS}:${jarFile}
else
GOBBLIN_JARS=${GOBBLIN_JARS}:${jarFile}
fi
done
# just removing first colon if present
GOBBLIN_HADOOP_JARS=${GOBBLIN_HADOOP_JARS#:}
GOBBLIN_JARS=${GOBBLIN_JARS#:}
if [[ -n "$HADOOP_HOME" ]]; then
GOBBLIN_HADOOP_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath)
GOBBLIN_CLASSPATH=${GOBBLIN_JARS}:${GOBBLIN_HADOOP_CLASSPATH}
else
echo "WARN: HADOOP_HOME is not defined. Gobblin Hadoop libs will be used in classpath."
GOBBLIN_HADOOP_CLASSPATH=${GOBBLIN_HADOOP_JARS}
fi
GOBBLIN_CLASSPATH=${GOBBLIN_JARS}:${GOBBLIN_HADOOP_CLASSPATH}
if [[ -n "$EXTRA_JARS" ]]; then
GOBBLIN_CLASSPATH=${GOBBLIN_CLASSPATH}:"$EXTRA_JARS"
fi
GOBBLIN_CLASSPATH=${GOBBLIN_CONF}:${GOBBLIN_CLASSPATH}
}
function get_gobblin_mapreduce_libs() {
if [[ -z "$GOBBLIN_VERSION" ]]; then
echo ""
return
fi
GOBBLIN_MR_JARS=(
commons-cli-1.3.1.jar
mysql-connector-java-*.jar
avro-*.jar
commons-lang3-*.jar
config-*.jar
data-*.jar
gson-*.jar
guava-*.jar
joda-time-*.jar
javassist-*.jar
kafka_2.11-*.jar
kafka-clients-0.8.2.2.jar
metrics-core-*.jar
metrics-graphite-*.jar
scala-library-*.jar
influxdb-java-*.jar
okhttp-*.jar
okio-*.jar
reactive-streams-*.jar
retrofit-*.jar
reflections-*.jar
gobblin-*.jar
)
old_IFS=$IFS
IFS=' '
MR_JARS=''
for i in "${GOBBLIN_MR_JARS[@]}"; do
for j in $(eval echo -e "$GOBBLIN_LIB/${i}"); do
MR_JARS="$MR_JARS,$j"
done
done
echo ${MR_JARS:1}
IFS=$old_IFS
}
function start() {
# build and set the classpath in variable: GOBBLIN_CLASSPATH
build_classpath
LOG_OUT_FILE="${GOBBLIN_LOGS}/${GOBBLIN_MODE}.out"
LOG_ERR_FILE="${GOBBLIN_LOGS}/${GOBBLIN_MODE}.err"
ADDITIONAL_ARGS=""
# for all gobblin commands
if [[ "$GOBBLIN_MODE_TYPE" == "$CLI" ]]; then
if [[ "$GOBBLIN_MODE" = "$CLASSPATH_CMD" ]]; then
# not adding anything in echo here so that it can be used for getting classpath from any other command
echo "$GOBBLIN_CLASSPATH"
else
#prints the command
GOBBLIN_COMMAND="$JAVA_HOME/bin/java $GC_OPTS $JVM_OPTS $LOG4J_OPTS -cp $GOBBLIN_CLASSPATH $CLI_CLASS $CMD_PARAMS"
if [[ $VERBOSE -eq 1 ]]; then
echo "Running command: $GOBBLIN_COMMAND";
fi
# execute the command
$GOBBLIN_COMMAND
fi
# for all gobblin execution modes
else
if [[ "$GOBBLIN_MODE" = "$MAPREDUCE_MODE" ]]; then
if [[ -z "$JOB_CONF_FILE" ]]; then
echo "--job-conf-file is required that specifies the job to be run into mapreduce mode by Gobblin."
exit 1;
fi
MR_MODE_LIB_JARS=$(get_gobblin_mapreduce_libs)
export HADOOP_CLASSPATH=${GOBBLIN_CLASSPATH}
export HADOOP_USER_CLASSPATH_FIRST=true
if [[ -n "$JVM_OPTS" ]]; then
export HADOOP_OPTS="$HADOOP_OPTS $JVM_OPTS"
fi
if [[ -n "$EXTRA_JARS" ]]; then
MR_MODE_LIB_JARS="$EXTRA_JARS,${MR_MODE_LIB_JARS}"
fi
JT_COMMAND=$([ -z $JOB_TRACKER_URL ] && echo "" || echo "-jt $JOB_TRACKER_URL")
FS_COMMAND=$([ -z $FS_URL ] && echo "" || echo "-fs $FS_URL")
GOBBLIN_COMMAND="hadoop jar $GOBBLIN_LIB/gobblin-runtime-$GOBBLIN_VERSION.jar $MAPREDUCE_CLASS \
-D mapreduce.job.user.classpath.first=true $JT_COMMAND $FS_COMMAND \
-libjars $MR_MODE_LIB_JARS -sysconfig $GOBBLIN_CONF/application.conf -jobconfig $JOB_CONF_FILE \
$LOG4J_OPTS"
else
CLASS_N_ARGS=''
if [[ "$GOBBLIN_MODE" = "$STANDALONE_MODE" ]]; then
CLASS_N_ARGS="$STANDALONE_CLASS $GOBBLIN_CONF/application.conf"
ADDITIONAL_ARGS="-Dgobblin.logs.dir=${GOBBLIN_LOGS}"
if [ -z "$GOBBLIN_WORK_DIR" ] && [ "$CHECK_ENV_VARS" == true ]; then
die "GOBBLIN_WORK_DIR is not set!"
fi
if [ -z "$GOBBLIN_JOB_CONFIG_DIR" ] && [ "$CHECK_ENV_VARS" == true ]; then
die "Environment variable GOBBLIN_JOB_CONFIG_DIR not set!"
fi
elif [[ "$GOBBLIN_MODE" = "$AWS_MODE" ]]; then
CLASS_N_ARGS="$AWS_CLASS"
elif [[ "$GOBBLIN_MODE" = "$YARN_MODE" ]]; then
GOBBLIN_CLASSPATH="${GOBBLIN_CLASSPATH}:${HADOOP_YARN_HOME}/lib"
CLASS_N_ARGS="$YARN_CLASS"
elif [[ "$GOBBLIN_MODE" = "$CLUSTER_MASTER_MODE" ]]; then
CLASS_N_ARGS="$CLUSTER_MASTER_CLASS --standalone_cluster true --app_name $CLUSTER_NAME "
elif [[ "$GOBBLIN_MODE" = "$GOBBLIN_AS_SERVICE_MODE" ]]; then
CLASS_N_ARGS="$SERVICE_MANAGER_CLASS --service_name Gobblin-$GOBBLIN_AS_SERVICE_MODE --service_id GAAS-1"
elif [[ "$GOBBLIN_MODE" = "$CLUSTER_WORKER_MODE" ]]; then
#Find largest worker id and use next one to start worker in incremental order, starts with 1
LAST_WORKER_ID=$(ps aux | grep -v grep | grep -Po "($CLUSTER_WORKER_CLASS)(.*)(cluster-worker.\K([0-9]+))" | sort --version-sort | tail -1)
WORKER_ID=$((LAST_WORKER_ID+1))
LOG_OUT_FILE="${GOBBLIN_LOGS}/${GOBBLIN_MODE}.$WORKER_ID.out"
LOG_ERR_FILE="${GOBBLIN_LOGS}/${GOBBLIN_MODE}.$WORKER_ID.err"
CLASS_N_ARGS="$CLUSTER_WORKER_CLASS --app_name $CLUSTER_NAME --helix_instance_name ${GOBBLIN_MODE}.$WORKER_ID "
else
echo "Invalid gobblin command or execution mode... [EXITING]"
exit 1
fi
GOBBLIN_COMMAND="$JAVA_HOME/bin/java -cp $GOBBLIN_CLASSPATH $GC_OPTS $JVM_OPTS $LOG4J_OPTS $ADDITIONAL_ARGS $CLASS_N_ARGS"
fi
# execute the command
if [ $VERBOSE -eq 1 ] && [ $LOG_TO_STDOUT -eq 1 ]; then
echo "Running command: $GOBBLIN_COMMAND"
elif [[ $VERBOSE -eq 1 ]]; then
echo "Running command: $GOBBLIN_COMMAND 1>> ${LOG_OUT_FILE} 2>> ${LOG_ERR_FILE}";
fi
if [[ LOG_TO_STDOUT -eq 1 ]]; then
$GOBBLIN_COMMAND
else
nohup $GOBBLIN_COMMAND 1>> ${LOG_OUT_FILE} 2>> ${LOG_ERR_FILE} &
fi
PID=$!
echo $PID >> $PID_FILE
if [[ $? != 0 ]]; then
echo "Starting the Gobblin $GOBBLIN_MODE process... [FAILED]"
else
echo "Started the Gobblin $GOBBLIN_MODE process [pid: $PID] ... [DONE]"
fi
fi
}
function stop() {
# echo "Stopping the Gobblin $MODE_TYPE process..."
PID=''
if [[ ! -f $PID_FILE ]]; then
echo "Gobblin process id file not found at $PID_FILE"
else
PID=`tail -1 $PID_FILE`
fi
if [[ -z "$PID" ]]; then
echo "Can not find any running Gobblin $GOBBLIN_MODE process..."
while true; do
read -p "Do you want to search gobblin $GOBBLIN_MODE process and stop it? (y/n): " search_and_kill
case ${search_and_kill} in
[Yy]*)
class_to_search=''
if [[ "$GOBBLIN_MODE" = "$MAPREDUCE_MODE" ]]; then
class_to_search="$MAPREDUCE_CLASS"
elif [[ "$GOBBLIN_MODE" = "$CLI" ]]; then
class_to_search="$CLI_CLASS"
elif [[ "$GOBBLIN_MODE" = "$STANDALONE_MODE" ]]; then
class_to_search="$STANDALONE_CLASS"
elif [[ "$GOBBLIN_MODE" = "$AWS_MODE" ]]; then
class_to_search="$AWS_CLASS"
elif [[ "$GOBBLIN_MODE" = "$YARN_MODE" ]]; then
class_to_search="$YARN_CLASS"
elif [[ "$GOBBLIN_MODE" = "$GOBBLIN_AS_SERVICE_MODE" ]]; then
class_to_search="$SERVICE_MANAGER_CLASS"
elif [[ "$GOBBLIN_MODE" = "$CLUSTER_MASTER_MODE" ]]; then
class_to_search="$CLUSTER_MASTER_CLASS"
elif [[ "$GOBBLIN_MODE" = "$CLUSTER_WORKER_MODE" ]]; then
class_to_search=$CLUSTER_WORKER_CLASS
fi
if [[ -z "$class_to_search" ]]; then
echo "Could not figure out process to search for MODE: $GOBBLIN_MODE...[ABORTED]"
exit
fi
PID=$(ps aux | grep "$class_to_search" | grep -v grep | awk '{print $2}')
break
;;
[Nn]*)
echo "Stopping the Gobblin $GOBBLIN_MODE process... [ABORTED]"
exit
;;
*)
echo "Please answer yes or no."
;;
esac
done
fi
if [[ -n "$PID" ]]; then
if kill -0 $PID > /dev/null 2>&1; then
kill $PID
printf "Stopping the Gobblin $GOBBLIN_MODE process (pid: $PID)... "; sleep 1; printf "[DONE]\n"
else
echo "Gobblin $GOBBLIN_MODE process (pid: $PID) is not running."
fi
# remove the pid from pid_file, and remove the file if no more pid's left.
case "$(uname -s)" in
Darwin)
sed -i '' '$d' $PID_FILE
;;
Linux)
sed -i '$d' $PID_FILE
;;
CYGWIN*|MINGW32*|MSYS*)
# TODO: check if this command works on windows
sed -i '' '$d' $PID_FILE
;;
*)
# do nothing
;;
esac
if [[ -s $PID_FILE ]]; then
rm $PID_FILE;
fi
else
echo "Can not find any running Gobblin $GOBBLIN_MODE process...[FAILED]"
fi
}
function status_check() {
# echo "Checking for Gobblin $MODE_TYPE status ..."
if [[ -e ${PID_FILE} ]]; then
PID=`cat $PID_FILE`
fi
if [[ -z ${PID} ]]; then
echo "Gobblin $GOBBLIN_MODE process id not found, probably it is not running."
elif ps -p ${PID} > /dev/null; then
echo "Gobblin $GOBBLIN_MODE process is running... [ pid: $PID ]."
else
echo "Gobblin $GOBBLIN_MODE process is not running. [ last known pid: ${PID}]."
fi
}
function status() {
# echo "Checking for Gobblin $MODE_TYPE status ..."
if [[ -e ${PID_FILE} ]]; then
PID=`cat $PID_FILE`
fi
if [[ -z ${PID} ]]; then
echo "Gobblin $GOBBLIN_MODE process id not found, probably it is not running."
elif ps -p ${PID} > /dev/null; then
echo "Gobblin $GOBBLIN_MODE process is running... [ pid: $PID ]."
else
echo "Gobblin $GOBBLIN_MODE process is not running. [ last known pid: ${PID}]."
fi
}
case "$ACTION" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
stop
sleep 3
start
;;
*)
echo "ERROR: One of the action is required: start/stop/status/restart"
print_help_n_exit
;;
esac