textproc/elasticsearch5: Use native facilites for manging the process

start/stop/status will behave correctly with procname set.

This now prevents Elastic from starting when a process is already
running, stops cleanly, and also handles multiple profiles correctly:
if only some of the profile processes are running, a "service
elasticsearch start" will only start the profiles that are not detected
as running already.

All of this comes with the caveat that Elastic is slow to start up and write
its pidfile, so if you are too quick it will allow duplicate processes
to start. Here be JVM dragons.

Approved by:	portmgr (with hat)
MFH:		2018Q1
This commit is contained in:
Mark Felder 2018-02-22 23:03:41 +00:00
parent b2df79a202
commit dae3775e5b
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=462650
2 changed files with 4 additions and 50 deletions

View file

@ -3,7 +3,7 @@
PORTNAME= elasticsearch PORTNAME= elasticsearch
PORTVERSION= 5.3.0 PORTVERSION= 5.3.0
PORTREVISION= 2 PORTREVISION= 3
CATEGORIES= textproc java devel CATEGORIES= textproc java devel
MASTER_SITES= https://artifacts.elastic.co/downloads/${PORTNAME}/ \ MASTER_SITES= https://artifacts.elastic.co/downloads/${PORTNAME}/ \
http://mirrors.rit.edu/zi/ http://mirrors.rit.edu/zi/
@ -51,7 +51,8 @@ ELASTIC_LOGDIR= /var/log/elasticsearch
SUB_LIST= SEARCHUSER=${SEARCHUSER} \ SUB_LIST= SEARCHUSER=${SEARCHUSER} \
SEARCHGROUP=${SEARCHGROUP} \ SEARCHGROUP=${SEARCHGROUP} \
PORTVERSION=${PORTVERSION} PORTVERSION=${PORTVERSION} \
JAVA=${JAVA}
SUB_FILES= pkg-message SUB_FILES= pkg-message
PLIST_SUB+= SEARCHUSER=${SEARCHUSER} \ PLIST_SUB+= SEARCHUSER=${SEARCHUSER} \
SEARCHGROUP=${SEARCHGROUP} \ SEARCHGROUP=${SEARCHGROUP} \

View file

@ -36,12 +36,11 @@ load_rc_config ${name}
required_files="${elasticsearch_config}/elasticsearch.yml" required_files="${elasticsearch_config}/elasticsearch.yml"
_pidprefix=/var/run/elasticsearch _pidprefix=/var/run/elasticsearch
pidfile=${_pidprefix}.pid pidfile=${_pidprefix}.pid
procname=%%JAVA%%
extra_commands="console status" extra_commands="console status"
console_cmd=elasticsearch_console console_cmd=elasticsearch_console
start_precmd=elasticsearch_precmd start_precmd=elasticsearch_precmd
status_cmd=elasticsearch_status
stop_cmd=elasticsearch_stop
command=%%PREFIX%%/lib/elasticsearch/bin/elasticsearch command=%%PREFIX%%/lib/elasticsearch/bin/elasticsearch
command_args="-d --pidfile=${pidfile} -Epath.conf=${elasticsearch_config}" command_args="-d --pidfile=${pidfile} -Epath.conf=${elasticsearch_config}"
@ -59,52 +58,6 @@ elasticsearch_console()
run_rc_command "start" run_rc_command "start"
} }
elasticsearch_stop()
{
rc_pid=$(elasticsearch_check_pidfile $pidfile)
if [ -z "$rc_pid" ]; then
[ -n "$rc_fast" ] && return 0
echo "${name} not running? (check $pidfile)."
return 1
fi
echo "Stopping ${name}."
kill $sig_stop ${rc_pid}
wait_for_pids ${rc_pid}
}
elasticsearch_status()
{
rc_pid=$(elasticsearch_check_pidfile $pidfile)
if [ -z "$rc_pid" ]; then
[ -n "$rc_fast" ] && return 0
echo "${name} not running? (check $pidfile)."
return 1
fi
echo "${name} is running as pid ${rc_pid}."
}
elasticsearch_check_pidfile()
{
_pidfile=$1
if [ -z "$_pidfile" ]; then
err 3 'USAGE: elasticsearch_check_pidfile pidfile'
fi
if [ ! -f $_pidfile ]; then
debug "pid file ($_pidfile): not readable."
return
fi
read _pid _junk < $_pidfile
if [ -z "$_pid" ]; then
debug "pid file ($_pidfile): no pid in file."
return
fi
if [ -n "`%%PREFIX%%/bin/jps -l | grep -e "^$_pid"`" ]; then
echo -n $_pid
fi
}
if [ -n "$2" ]; then if [ -n "$2" ]; then
profile="$2" profile="$2"
if [ "x${elasticsearch_profiles}" != "x" ]; then if [ "x${elasticsearch_profiles}" != "x" ]; then