01.04.2019 3:55, Jim Trigg wrote:

> How do I write an rc script to preserve the pid of a child process? The 
> "port" I'm working with (technically a commercial package) has a startup 
> script that launches a java process. I had written a simple rc wrapper around 
> the script but have found it doesn't support stop because the pid captured is 
> the script's pid rather than the java process's pid.

Use something like this for startup script "portname.in" for Java-based long 
running service:

#!/bin/sh
#
# $FreeBSD$
#

# PROVIDE: portname
# REQUIRE: LOGIN
# KEYWORD: shutdown

#
# Add the following line to /etc/rc.conf to enable `portname':
#
# portname_enable="YES"

. /etc/rc.subr

command_interpreter="."
command="%%PREFIX%%/bin/java"
command_args="-jar portname.jar"
name="%%PORTNAME%%"
rcvar="${name}_enable"
start_cmd="start_cmd"
stop_cmd="stop_cmd"
pidfile="/var/run/${name}.pid"
required_files="%%DATADIR%%/portname.jar"
portname_chdir="%%DATADIR%%"

eval `JAVAVM_DRYRUN=yes ${command} | fgrep JAVAVM_COMMAND`
procname=${JAVAVM_COMMAND}

start_cmd()
{
        check_startmsgs && echo "Starting ${name}."
        cd ${portname_chdir}
        daemon -u %%USERS%% -f -p ${pidfile} ${command} ${command_args} start
}

stop_cmd()
{
        check_startmsgs && echo "Stopping ${name}."
        rc_pid=$(check_pidfile $pidfile $procname)
        pkill -F ${pidfile}
        wait_for_pids $rc_pid
}

load_rc_config ${name}
: ${portname_enable="NO"}
run_rc_command "$1"
#EOF

That is, use daemon(8) utility that can act as superviser for java process:
start it with needed arguments, write its pid to pidfile etc.

_______________________________________________
freebsd-ports@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to