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

View file

@ -36,12 +36,11 @@ load_rc_config ${name}
required_files="${elasticsearch_config}/elasticsearch.yml"
_pidprefix=/var/run/elasticsearch
pidfile=${_pidprefix}.pid
procname=%%JAVA%%
extra_commands="console status"
console_cmd=elasticsearch_console
start_precmd=elasticsearch_precmd
status_cmd=elasticsearch_status
stop_cmd=elasticsearch_stop
command=%%PREFIX%%/lib/elasticsearch/bin/elasticsearch
command_args="-d --pidfile=${pidfile} -Epath.conf=${elasticsearch_config}"
@ -59,52 +58,6 @@ elasticsearch_console()
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
profile="$2"
if [ "x${elasticsearch_profiles}" != "x" ]; then