supervision - discussion about system services, daemon supervision, init, runlevel management, and tools such as s6 and runit
 help / color / mirror / Atom feed
From: Charlie Brady <charlieb-smarden-supervision@budge.apana.org.au>
Subject: Warning about mysqld's behaviour
Date: Sun, 10 Apr 2005 23:16:06 -0400 (EDT)	[thread overview]
Message-ID: <Pine.LNX.4.61.0504102302320.29440@e-smith.charlieb.ott.istop.com> (raw)


Version of mysql is 3.23.58. I haven't looked at other versions, so don't 
know whether this is new or old brain-damage.

I have a straightforward run file:

#!/bin/sh
exec /usr/libexec/mysqld \
  --defaults-file=/etc/my.cnf \
  --basedir=/usr \
  --datadir=/var/lib/mysql \
  --user=mysql \
  --pid-file=/var/run/mysqld/mysqld.pid

This starts a set of four mysqld processes/threads:

...
   492 ?        S      0:00  \_ supervise mysqld
31796 ?        S      0:00  |   \_ /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --
31797 ?        S      0:00  |       \_ /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysq
31798 ?        S      0:00  |           \_ /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/
31800 ?        S      0:00  |           \_ /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/
493   ?        S      0:00  \_ supervise log
...

But notice that the pid file doesn't reference the parent process:

sh-2.05a# svstat .
.: up (pid 31796) 123 seconds, normally down
sh-2.05a#

sh-2.05a# cat /var/run/mysqld/mysqld.pid ; echo
31798
sh-2.05a#

But, it's worse than that, Jim! The parent process - the one that 
supervise is watching and "controlling" ignores INT, TERM and QUIT 
signals.

sh-2.05a# kill -TERM 31796
sh-2.05a# svstat .
.: up (pid 31796) 309 seconds, normally down
sh-2.05a# kill -QUIT 31796
sh-2.05a# svstat .
.: up (pid 31796) 321 seconds, normally down
sh-2.05a# kill -INT 31796
sh-2.05a# svstat .
.: up (pid 31796) 327 seconds, normally down
sh-2.05a#

So we lose control of the daemon:

sh-2.05a# svc -t .
sh-2.05a# svstat .
.: up (pid 31796) 417 seconds, normally down
sh-2.05a#

Fortunately runit provides an easy solution to this problem (although we 
are left with no option but to trust a pid file, with all the problems 
that entails). We just create control/t and control/d files (at least), 
containing:

#! /bin/sh
exec kill -TERM $(cat /var/run/mysqld/mysqld.pid)

Without this feature from runit, we need to do something like this to run 
mysqld under supervise:

trap 'read pid </var/run/mysqld/mysqld.pid && kill "$pid"' TERM QUIT || exit "$?"
/usr/libexec/mysqld .... --pid-file=/var/run/mysqld/mysqld.pid &
wait

[Gerrit, if you can verify this, you'll need to update your run script 
list.]

---
Charlie


             reply	other threads:[~2005-04-11  3:16 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-11  3:16 Charlie Brady [this message]
2005-04-14  8:53 ` Gerrit Pape
2005-04-14 12:07   ` Alex Efros
2005-04-14 15:29     ` Charlie Brady
2005-04-14 18:05   ` Vincent Danen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.61.0504102302320.29440@e-smith.charlieb.ott.istop.com \
    --to=charlieb-smarden-supervision@budge.apana.org.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).