From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.sysutils.supervision.general/2450 Path: news.gmane.org!.POSTED!not-for-mail From: Gerrit Pape Newsgroups: gmane.comp.sysutils.supervision.general Subject: Re: wrong exit code for sv status in lsb mode Date: Tue, 8 Jan 2019 08:11:47 +0000 Message-ID: <20190108081147.11948.qmail@83e0cb8f62b7f0.315fe32.mid.smarden.org> References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: blaine.gmane.org 1546934986 16267 195.159.176.226 (8 Jan 2019 08:09:46 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 8 Jan 2019 08:09:46 +0000 (UTC) To: supervision@list.skarnet.org Original-X-From: supervision-return-2040-gcsg-supervision=m.gmane.org@list.skarnet.org Tue Jan 08 09:09:42 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 1ggmSD-00048u-Cl for gcsg-supervision@m.gmane.org; Tue, 08 Jan 2019 09:09:41 +0100 Original-Received: (qmail 2403 invoked by uid 89); 8 Jan 2019 08:12:16 -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 2396 invoked from network); 8 Jan 2019 08:12:16 -0000 Mail-Followup-To: supervision@list.skarnet.org Content-Disposition: inline In-Reply-To: Xref: news.gmane.org gmane.comp.sysutils.supervision.general:2450 Archived-At: 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,