From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.sysutils.supervision.general/2452 Path: news.gmane.org!.POSTED!not-for-mail From: "David Mountney via supervision" Newsgroups: gmane.comp.sysutils.supervision.general Subject: Re: wrong exit code for sv status in lsb mode Date: Tue, 8 Jan 2019 08:19:30 -0800 Message-ID: References: <20190108081147.11948.qmail@83e0cb8f62b7f0.315fe32.mid.smarden.org> Reply-To: David Mountney NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="0000000000007528f8057ef4b665" X-Trace: blaine.gmane.org 1546964258 31416 195.159.176.226 (8 Jan 2019 16:17:38 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 8 Jan 2019 16:17:38 +0000 (UTC) To: supervision@list.skarnet.org Original-X-From: supervision-return-2042-gcsg-supervision=m.gmane.org@list.skarnet.org Tue Jan 08 17:17:34 2019 Return-path: Envelope-to: gcsg-supervision@m.gmane.org Original-Received: from alyss.skarnet.org ([95.142.172.232]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1ggu4L-00081Z-OV for gcsg-supervision@m.gmane.org; Tue, 08 Jan 2019 17:17:33 +0100 Original-Received: (qmail 685 invoked by uid 89); 8 Jan 2019 16:20:10 -0000 Mailing-List: contact supervision-help@list.skarnet.org; run by ezmlm Original-Sender: Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 673 invoked from network); 8 Jan 2019 16:20:10 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gitlab.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=tpK+5v50b35KTmrGC2JWushBvzeatkn8Kj7eEx6fOeU=; b=ZbwYsAJcblkt+YkKqCn5t/ZefETZiC9uduMk/GgsBGvt6s5lGYNd8RVsDenh2yfA8Z LgpfU3Po1gxFCCfQmdCSNFz4TJFJ2MW999F7eecZFiBkSEHgWuJVJDGderGIFyl73Xds Fbtu4lC/n5UOGbujYFGRpE+1UVu9RYusYTyCk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=tpK+5v50b35KTmrGC2JWushBvzeatkn8Kj7eEx6fOeU=; b=XHJco2HHyEikXHDRUSieo7F7cwIkqFmki/5OIK5JuHn6a0sap6u1XnWdoXqWyc2F5z 0N8yM+NzPGeJSO+d9+L/nfiCj5T6Ccnm2nHp3scXsAUcqRUXriOTb1uKH1OBSzhwjMP3 LO8gfVTMmzptv1DIdE73X/tlQMkIPxO4jnZ+wahLts7m1ZsIsprOxCjMvAOm1YL6f1U/ QTd4eW08u3xVnDaole1Uu+JbuxYVH8XJg1RN2hjvsgHd2zGjBZRi2jPrPh3ttV1PZHLK tsRXujDm6kHB+6E/piEa239ZsRBrz5FphRnqRd8BIfphaV9VK++pJ2KykuvVJ3lFmwjY qGQg== X-Gm-Message-State: AJcUukcts9ZVb6YT5DGXPSmZPVxSPNKMcW5RzRHUCOYiDc66gl9r/8ic k7U5+txdkzVtxE4DGY/g7NEqze45RcM6aN+8E+ILHyiq6fkVgg== X-Google-Smtp-Source: ALg8bN5Y1Pz44bimyJZmpZQIWEjR4lJv1gDJSy7WTyVUcWhx/fiL41aKx5rhcA60vw9Uv9iAHHOVuQVwQHQh34acN8I= X-Received: by 2002:aca:4909:: with SMTP id w9mr1460026oia.203.1546964381793; Tue, 08 Jan 2019 08:19:41 -0800 (PST) In-Reply-To: <20190108081147.11948.qmail@83e0cb8f62b7f0.315fe32.mid.smarden.org> Xref: news.gmane.org gmane.comp.sysutils.supervision.general:2452 Archived-At: --0000000000007528f8057ef4b665 Content-Type: text/plain; charset="UTF-8" The error was introduced in commit 5fe1bc773c2d979093fe4b1f3ecbbed5e6acdaf0 "sv.c: properly format status command's output on failure cases." Where the log status is being saved to the same variable as the service status. The quick fix would be to not record the log status for now: $ git diff src/sv.c diff --git a/src/sv.c b/src/sv.c index 9003142..1676227 100644 --- a/src/sv.c +++ b/src/sv.c @@ -167,7 +167,7 @@ int status(char *unused) { } else { outs("; "); - if (svstatus_get()) { rc =svstatus_print("log"); outs("\n"); } + if (svstatus_get()) { svstatus_print("log"); outs("\n"); } } islog =0; flush(""); $ On Tue, Jan 8, 2019 at 12:18 AM Gerrit Pape wrote: > Hi, > > donations for my free software increased recently, not sure why, but > thanks. > > runit upstream sources with history still are available through > > $ git clone http://smarden.org/git/runit.git > > Below is the diff for sv.c from 2.1.1 to 2.1.2. Possibly anyone can > spot the error and create a patch if that issue is annoying. > > Regards, Gerrit. > > > $ git diff v2.1.1..v2.1.2 src/sv.c > diff --git a/src/sv.c b/src/sv.c > index d126cee..9003142 100644 > --- a/src/sv.c > +++ b/src/sv.c > @@ -41,6 +41,7 @@ unsigned int lsb; > unsigned int verbose =0; > unsigned long wait =7; > unsigned int kll =0; > +unsigned int islog =0; > struct taia tstart, tnow, tdiff; > struct tai tstatus; > > @@ -67,6 +68,7 @@ void fatal2(char *m1, char *m2) { > void out(char *p, char *m1) { > buffer_puts(buffer_1, p); > buffer_puts(buffer_1, *service); > + if (islog) buffer_puts(buffer_1, "/log"); > buffer_puts(buffer_1, ": "); > buffer_puts(buffer_1, m1); > if (errno) { > @@ -153,20 +155,22 @@ int status(char *unused) { > int rc; > > rc =svstatus_get(); > - switch(r) { case -1: if (lsb) done(4); case 0: return(0); } > + switch(rc) { case -1: if (lsb) done(4); case 0: return(0); } > rc =svstatus_print(*service); > + islog =1; > if (chdir("log") == -1) { > if (errno != error_noent) { > - outs("; log: "); outs(WARN); > - outs("unable to change to log service directory: "); > - outs(error_str(errno)); > + outs("; "); > + warn("unable to change directory"); > } > + else outs("\n"); > } > - else > - if (svstatus_get()) { > - outs("; "); svstatus_print("log"); > - } > - flush("\n"); > + else { > + outs("; "); > + if (svstatus_get()) { rc =svstatus_print("log"); outs("\n"); } > + } > + islog =0; > + flush(""); > if (lsb) switch(rc) { case 1: done(0); case 2: done(3); case 0: > done(4); } > return(rc); > } > @@ -305,9 +309,11 @@ int main(int argc, char **argv) { > acts ="d"; kll =1; cbk =✓ break; > case 'T': > acts ="tc"; kll =1; cbk =✓ break; > + case 't': > + if (!str_diff(action, "try-restart")) { acts ="tc"; cbk =✓ > break; } > case 'c': > if (!str_diff(action, "check")) { act =0; acts ="C"; cbk =✓ > break; } > - case 'u': case 'd': case 'o': case 't': case 'p': case 'h': > + case 'u': case 'd': case 'o': case 'p': case 'h': > case 'a': case 'i': case 'k': case 'q': case '1': case '2': > action[1] =0; acts =action; break; > case 's': > @@ -318,6 +324,7 @@ int main(int argc, char **argv) { > act =&status; cbk =0; break; > case 'r': > if (!str_diff(action, "restart")) { acts ="tcu"; cbk =✓ break; } > + if (!str_diff(action, "reload")) { acts ="h"; cbk =✓ break; } > usage(); > case 'f': > if (!str_diff(action, "force-reload")) > $ > > > On Fri, Jan 04, 2019 at 05:10:13PM -0800, David Mountney via supervision > wrote: > > This looks like it's still a problem introduced in runit 2.1.2 > > > > If you have defined a log handler, only the status of the log handler is > > returned by sv status. > > > > Its not clear to me from the changelog why this change was made. > > > > I guess, ideally if the service status was successful, you could then > also > > check the log status, but as it is now, if the service is down, but the > log > > is up, sv status reports all is well for its exit codes. > > > > I've seen other references to this bug, where projects have reverted to > the > > previous runit version: > https://github.com/chef/omnibus-software/pull/793 > > > > It would be ideal if we could just get this fixed. > > > > > > > From: Fabian Ruff > > > Date: Tue, 18 Aug 2015 23:33:50 +0200 > > > Tue, 18 Aug 2015 23:33:50 +0200 > > > Hi, > > > I just noticed that the exit code of sv status in "lsb" mode is not 3 > in > > > all cases when > > > the service is "down". > > > The problem arises when a service defines a log handler. In that case > the > > > return code > > > of svstatus print for the log process overwrites the return code of > > > svstatus print of > > > the actual supervised process (line 170 of sv.c). > > > Is this intentional? Looks like a bug to me. > > > Kind regards, > --0000000000007528f8057ef4b665--