2011-05-17 21:25:01
Apache und MySQL supervised
Unter notfall-sshd_oom-resistent steht beschrieben, wie man sshd supervised (mit den daemontools von DJB) betreibt. Dieser Post zeigt Beispiele, wie auch Apache und MySQL unter der Kontrolle von supervise laufen.
Apache
> ps axuwf|...
/command/svscan /service/
 \_ supervise apache-sv
    \_ /usr/sbin/apache2 -f /etc/httpd/httpd.conf -D FOREG..
> cat /service/apache-sv/run 
#!/bin/bash
exec 2>&1
# don't respawn too fast
sleep 1
# in case that apache lost his father "supervise" kill the
# procs
ps axuwf |grep -v grep \
  |grep ' /usr/sbin/apache2 ' \
  |awk '{print$2}' \
  |xargs -r kill -TERM
exec /usr/sbin/apache2 -f /etc/httpd/httpd.conf -D FOREGROUND
MySQL
#!/bin/bash
export PATH=/command:$PATH:/usr/local/bin:/usr/local/sbin
PROC_PATTERN=usr.sbin.mysqld
MAX_KILL_ATTEMPTS=20
SCRIPT=$(pwd)/$0
get_pid() {
  PID=$(/bin/ps axwf \
        |grep $PROC_PATTERN|grep -v grep\
        |awk '{print$1}' 2>/dev/null)
}
kill_procs() {
  COUNT=0
  get_pid
  while [ "$PID" ]
  do
    kill -TERM $PID 2>/dev/null
    let COUNT=COUNT+1
    [ "$COUNT" -gt $MAX_KILL_ATTEMPTS ] \
      && kill -9 $PID 2>/dev/null
    sleep 3
    get_pid
  done
}
# we must be sure: kill all remaining procs
kill_procs
# this should never be reached, otherwise there are 
# maybe too many databases/tables on this host
ulimit -n 250000
exec /usr/sbin/mysqld \
  --defaults-file=/etc/mysql/my.cnf \
  --basedir=/usr \
  --datadir=/var/lib/mysql \
  --pid-file=/var/run/mysqld/mysqld.pid \
  --socket=/var/run/mysqld/mysqld.sock