Subject: Re: bug#36731: shepherd lost track of nginx

From: Ludovic Courtès <[email-masked]>
Date: Sat, 20 Jul 2019 00:49:03 +0200

Hello,

Robert Vollmert <[email-masked]> skribis:

> Not sure who’s at fault here, but without doing anything weird,
> I ended up with a system where shepherd thought that nginx was
> stopped, while there was still an nginx process around. I
> certainly didn’t start it by hand.

Did you try “herd status nginx” to see shepherd’s notion of the nginx
process?

> The result was this:
>
> $ sudo herd restart nginx
> Service nginx is not running.
> herd: exception caught while executing 'start' on service 'nginx':
> Throw to key `srfi-34' with args `("#<condition &invoke-error [program: \"/gnu/store/mlg0xfbiq03s812rm3v7mrlhyngas4xp-nginx-1.17.1/sbin/nginx\" arguments: (\"-c\" \"/gnu/store/r6gl9n7pwf4npiri05qxr40vdihdm2yy-nginx.conf\" \"-p\" \"/var/run/nginx\") exit-status: 1 term-signal: #f stop-signal: #f] 147e000>")’.

Do you use an “opaque” nginx config file, or do you use <nginx-...>
records?

In the former case, the ‘start’ method won’t attempt to read the PID
file (because it cannot be sure it’ll exist), so it’s effectively unable
to track the process.  See comment in ‘nginx-shepherd-service’.

> That error message could also be clearer about what’s going on. At any
> rate, after I killed the nginx process, “herd start nginx” worked fine.

I agree that we could and should improve the error message.  Redirecting
nginx’s stderr so that shepherd clients can see it would be best.

Thanks,
Ludo’.