165 lines
5.2 KiB
Text
165 lines
5.2 KiB
Text
#!/sbin/openrc-run
|
|
|
|
description="Manages the services needed to run Artifactory on a dedicated Tomcat"
|
|
command="/opt/artifactory/tomcat/bin/catalina.sh"
|
|
pidfile="/opt/artifactory/run/artifactory.pid"
|
|
procname="artifactory"
|
|
user=${ARTIFACTORY_USER:-artifactory}
|
|
group=${group:-artifactory}
|
|
|
|
# Artifactory can be very slow to start, and without locking,
|
|
# restarting via runscript is very error prone
|
|
CATALINA_LOCK_FILE="$(dirname $pidfile)/lock"
|
|
|
|
CATALINA_MGMT_PORT=8015
|
|
REQUIRED_JAVA_VERSION="1.8"
|
|
START_TIMEOUT=300
|
|
|
|
# Helper functions:
|
|
is_mgmt_port_used() {
|
|
mgmt_port_used=$(netstat -vatn | grep LISTEN | grep $CATALINA_MGMT_PORT | wc -l)
|
|
}
|
|
|
|
get_pid_info() {
|
|
pidValue=""
|
|
javaPs=""
|
|
if [ -e "$pidfile" ]; then
|
|
pidValue=$(cat $pidfile)
|
|
if [ -n "$pidValue" ]; then
|
|
javaPs="$(ps -p $pidValue | grep java)"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
depend() {
|
|
need net nginx
|
|
use dns logger netmount
|
|
}
|
|
|
|
start_pre() {
|
|
if [ -z "$ARTIFACTORY_HOME" ] || [ ! -d "$ARTIFACTORY_HOME" ]; then
|
|
eerror "Artifactory home folder not defined or does not exists at $ARTIFACTORY_HOME"
|
|
return 1
|
|
fi
|
|
|
|
if [ -z "$pidfile" ]; then
|
|
eerror "Artifactory pid destination pidfile was not set!"
|
|
return 1
|
|
fi
|
|
|
|
if [ -z "$TOMCAT_HOME" ] || [ ! -d "$TOMCAT_HOME" ]; then
|
|
eerror "Tomcat Artifactory folder not defined or does not exists at $TOMCAT_HOME"
|
|
return 1
|
|
fi
|
|
|
|
if [ -z "$ARTIFACTORY_USER" ]; then
|
|
ARTIFACTORY_USER=$user
|
|
fi
|
|
|
|
current_open_file_limit=$(su -l $ARTIFACTORY_USER -c "ulimit -n")
|
|
desired_open_file_limit=32000
|
|
if [ "$current_open_file_limit" != "unlimited" ] && [ $current_open_file_limit -lt $desired_open_file_limit ]; then
|
|
eerror "Maximum number of open files ($current_open_file_limit) is too small!"
|
|
eerror "You should add:"
|
|
eerror "artifactory soft nofile $desired_open_file_limit"
|
|
eerror "artifactory hard nofile $desired_open_file_limit"
|
|
eerror "to your /etc/security/limits.conf file."
|
|
return 1
|
|
fi
|
|
|
|
current_max_process_limit=$(su -l $ARTIFACTORY_USER -c "ulimit -u")
|
|
desired_max_process_limit=1024
|
|
if [ "$current_max_process_limit" != "unlimited" ] && [ $current_max_process_limit -lt $desired_max_process_limit ]; then
|
|
eerror "Number of processes $current_max_process_limit is too small!"
|
|
eerror "You should add:"
|
|
eerror "artifactory soft nproc $desired_max_process_limit"
|
|
eerror "artifactory hard nproc $desired_max_process_limit"
|
|
eerror "to your /etc/security/limits.conf file."
|
|
return 1
|
|
fi
|
|
|
|
if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then
|
|
einfo "Found java executable in $JAVA_HOME"
|
|
_java="$JAVA_HOME/bin/java"
|
|
elif command -v java > dev/null 2>&1 ; then
|
|
_java=java
|
|
else
|
|
eerror "No Java Runtime Environment (jre) found! At least java-$REQUIRED_JAVA_VERSION is required."
|
|
return 1
|
|
fi
|
|
if [ "$_java" ]; then
|
|
java_version=$($_java -version 2>&1 | grep 'version' | cut -d ' ' -f3 | tr -d \")
|
|
java_major=$(echo $java_version | cut -d . -f1-2)
|
|
if [ "$java_major" != "$REQUIRED_JAVA_VERSION" ] ; then
|
|
eerror "Java version $java_version is too old, java-$REQUIRED_JAVA_VERSION is required."
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# We have to pass start/stop through to catalina.sh, which doesn't understand restart (and restart can't be overridden in OpenRC):
|
|
start() {
|
|
get_pid_info
|
|
is_mgmt_port_used
|
|
if [ $mgmt_port_used -ne 0 ] || [ -n "$javaPs" ]; then
|
|
eerror "$RC_SERVICE already started!"
|
|
return 1
|
|
else
|
|
ebegin "Starting $RC_SERVICE"
|
|
start-stop-daemon --exec $command --pidfile $pidfile --user $user:$group --wait $START_TIMEOUT start
|
|
RETVAL=$?
|
|
eend $RETVAL "start-stop-daemon failed to start $RC_SERVICE"
|
|
fi
|
|
|
|
|
|
is_mgmt_port_used
|
|
seconds=1
|
|
while [ $mgmt_port_used -eq 0 ] && [ $seconds -lt $START_TIMEOUT ]; do
|
|
sleep 1
|
|
$((seconds=seconds+1))
|
|
is_mgmt_port_used
|
|
done
|
|
if [ $mgmt_port_used -eq 0 ]; then
|
|
eerror "$RC_SERVICE did not start in $START_TIMEOUT seconds!"
|
|
return 1
|
|
elif [ $mgmt_port_used -eq 1 ]; then
|
|
einfo "$RC_SERVICE started"
|
|
[ $RETVAL=0 ] && touch $CATALINA_LOCK_FILE
|
|
else
|
|
eerror "Got unexpected result when checking port $CATALINA_MGMT_PORT"
|
|
return 1
|
|
fi
|
|
return $RETVAL
|
|
}
|
|
|
|
stop() {
|
|
ebegin "Stopping $RC_SERVICE"
|
|
start-stop-daemon --stop --pidfile $pidfile --wait $START_TIMEOUT stop
|
|
RETVAL=$?
|
|
eend $RETVAL "Failed to stop $RC_SERVICE!"
|
|
|
|
[ $RETVAL=0 ] && rm -f "$CATALINA_LOCK_FILE" "$pidfile"
|
|
return $RETVAL
|
|
}
|
|
|
|
status() {
|
|
is_mgmt_port_used
|
|
if [ $mgmt_port_used -eq 0 ]; then
|
|
if [ -e "$pidfile" ]; then
|
|
eerror "$RC_SERVICE stopped but the pid file $pidfile still exists!"
|
|
RETVAL=1
|
|
else
|
|
if [ -e "$CATALINA_LOCK_FILE" ]; then
|
|
eerror "$RC_SERVICE is stopped but the lock file $CATALINA_LOCK_FILE still exists!"
|
|
RETVAL=2
|
|
else
|
|
eerror "$RC_SERVICE is stopped"
|
|
RETVAL=3
|
|
fi
|
|
fi
|
|
else
|
|
einfo "$RC_SERVICE is running"
|
|
RETVAL=0
|
|
fi
|
|
return $RETVAL
|
|
}
|