Subject: Re: bug#41429: Shepherd Sometimes Crashes

From: Efraim Flashner <[email-masked]>
Date: Thu, 21 May 2020 17:04:42 +0300

On Thu, May 21, 2020 at 07:51:54AM -0500, Katherine Cox-Buday wrote:
> Efraim Flashner <[email-masked]> writes:
> 
> > On Wed, May 20, 2020 at 09:59:03PM -0500, Katherine Cox-Buday wrote:
> >> I am running shepherd as a userspace service manager on an alien distro.
> >> Occassionally (often enough as to cause concern), Shepherd is crashing.
> >> I am unable to narrow down a cause, but anecdotally, it seems to happen
> >> more often when a service it's managing fails repeatedly and is
> >> disabled.
> >> 
> >> I'm running `strace` against the Shepherd process in an attempt to
> >> submit a better bug report, but this is all I have for now. Maybe others
> >> have also seen this behavior.
> >
> > I found it happens less often with shepherd-0.8. What version are you
> > running? Also possibly related, do you have mismatched versions of guile
> > between guix packages and your distro's native packages?
> 
> Sorry, I forgot to include the version! I am running 0.8 from a store
> which I update ~1 week.
> 
> > I've also sometimes found shepherd to crash when I add a service where
> > the start command is "wrong", as though the error were so bad that
> > shepherd says "Nope! That's it! I quit!"
> 
> I'm doing very standard things with `make-forkexec-constructor`, so I
> wouldn't expect any problems there.
> 
> Your comment is kind of scary though! Shepherd is the thing I want to
> stay up no matter what since it's responsible for monitoring and
> restarting things. The idea that a misbehaving or poorly written service
> could bring down the entire Shepherd process is a problem! Is there no
> isolation?

I have a whole collection of attempts to integrate mcron with shepherd,
to create loops and add jobs only when the service is active. Attempting
to fork off and then collect the child process and then fail just enough
to make the service restart. Lots of cringe-worthy code. The more common
fail scenarios I see are shepherd fails to start because it doesn't like
my start code of one of the services or actually starting the service
somehow kills it. All of those were with straight lambdas to the start
command though.

Do you have your services writing out any logs? Maybe there's a clue
there.

> > I'd suggest looking at .config/shepherd/shepherd.log but it's rather
> > sparse. Still, it might have something useful.
> 
> Yes, this is the first place I looked, but unfortunately there wasn't
> much usable informatino.
> 
> -- 
> Katherine

-- 
Efraim Flashner   <[email-masked]>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted