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"