From owner-freebsd-rc@freebsd.org Tue Nov 3 22:22:49 2015 Return-Path: Delivered-To: freebsd-rc@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4A8CBA24FD2 for ; Tue, 3 Nov 2015 22:22:49 +0000 (UTC) (envelope-from erdgeist@erdgeist.org) Received: from elektropost.org (elektropost.org [217.115.13.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 92D5E1CA2 for ; Tue, 3 Nov 2015 22:22:44 +0000 (UTC) (envelope-from erdgeist@erdgeist.org) Received: (qmail 60939 invoked from network); 3 Nov 2015 22:22:36 -0000 Received: from elektropost.org (HELO elektropost.org) (erdgeist@erdgeist.org) by elektropost.org with ESMTPS (DHE-RSA-AES128-SHA encrypted); 3 Nov 2015 22:22:36 -0000 To: freebsd-rc@FreeBSD.org From: Dirk Engling X-Enigmail-Draft-Status: N1110 Subject: etc/rc.subr rc_pid for start_cmd Message-ID: <563933AB.5090407@erdgeist.org> Date: Tue, 3 Nov 2015 23:22:35 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-rc@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Discussion related to /etc/rc.d design and implementation." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Nov 2015 22:22:49 -0000 Dear rc hackers, while fixing startup scripts for qmail I fell for the trap to assume rc.subr to do the "${name} already running? " check for me. When I then compared my rc script to several others from various ports/*/*/files/ directories I could not spot any difference until I noticed they were also doing it wrong, and would happily spawn more daemons when their custom start_cmd was invoked. I then went over a list returned from "grep -ri start_cmd /usr/ports/" and found that around a third of tools (that install their rc scripts from the /files/ directory, i.e. they were written by FreeBSD port maintainers, not some unwashed Linux hippies, who do not know better) do not really do the check either. While the other 2/3 hilariously re-implemented the rc.subr check in the most creative ways. Has there been any historic reason this check was not done somewhere around /etc/rc.subr:2088 like if [ $rc_arg = "start" -a -z "$rc_fast" -a -n "$rc_pid" ]; then if [ -z "$rc_quiet" ]; then echo 1>&2 "${name} already running? " \ "(pid=$rc_pid)." fi return 1 fi maybe with a knob to turn that off for daemons that really know what they're doing? If not I propose to move the check before custom ${XXX_cmd} evaluation and will be glad to provide a diff. erdgeist