From owner-freebsd-ports@freebsd.org Sun Mar 31 21:18:55 2019 Return-Path: Delivered-To: freebsd-ports@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 78AA6156D046 for ; Sun, 31 Mar 2019 21:18:55 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from hz.grosbein.net (hz.grosbein.net [IPv6:2a01:4f8:d12:604::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "hz.grosbein.net", Issuer "hz.grosbein.net" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 6DD3A91ED2 for ; Sun, 31 Mar 2019 21:18:44 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from eg.sd.rdtc.ru (eg.sd.rdtc.ru [IPv6:2a03:3100:c:13:0:0:0:5]) by hz.grosbein.net (8.15.2/8.15.2) with ESMTPS id x2VLIZme039024 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 31 Mar 2019 23:18:36 +0200 (CEST) (envelope-from eugen@grosbein.net) X-Envelope-From: eugen@grosbein.net X-Envelope-To: jktrigg@gmail.com Received: from [10.58.0.4] ([10.58.0.4]) by eg.sd.rdtc.ru (8.15.2/8.15.2) with ESMTPS id x2VLIZtI037781 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Mon, 1 Apr 2019 04:18:35 +0700 (+07) (envelope-from eugen@grosbein.net) Subject: Re: rc script problems To: Jim Trigg , freebsd-ports@freebsd.org References: <67a15aa3-d506-a2ba-137d-7d8a21bdcd3f@gmail.com> From: Eugene Grosbein Message-ID: <9db4328c-4b2c-c279-0a82-891b7350f035@grosbein.net> Date: Mon, 1 Apr 2019 04:18:26 +0700 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <67a15aa3-d506-a2ba-137d-7d8a21bdcd3f@gmail.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=0.3 required=5.0 tests=BAYES_00,LOCAL_FROM,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Report: * -2.3 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * -0.0 SPF_PASS SPF: sender matches SPF record * 2.6 LOCAL_FROM From my domains X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on hz.grosbein.net X-Rspamd-Queue-Id: 6DD3A91ED2 X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; spf=permerror (mx1.freebsd.org: domain of eugen@grosbein.net uses mechanism not recognized by this client) smtp.mailfrom=eugen@grosbein.net X-Spamd-Result: default: False [-3.62 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; MX_INVALID(0.50)[greylisted]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[grosbein.net]; RCVD_COUNT_THREE(0.00)[3]; TO_MATCH_ENVRCPT_SOME(0.00)[]; R_SPF_PERMFAIL(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; NEURAL_HAM_SHORT(-0.90)[-0.899,0]; IP_SCORE(-1.12)[ip: (-1.49), ipnet: 2a01:4f8::/29(-2.15), asn: 24940(-1.94), country: DE(-0.01)]; FREEMAIL_TO(0.00)[gmail.com]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/29, country:DE]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_TLS_ALL(0.00)[] X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 31 Mar 2019 21:18:55 -0000 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.