.zlogin にした

前回の続き。
ログイン項目に登録しても上手く動かなかったので、 .zlogin に仕込んで動かすようにしてる。
スクリプト自体もコマンドの取扱いをちょっと神経質にしてみたり、ちょっとした bug fix した。

supervisedium

#!/bin/sh

RM="/bin/rm"
CAT="/bin/cat"
OPEN="/usr/bin/open"
WHOAMI="/usr/bin/whoami"
SLEEP="/bin/sleep"


PIDFILE="/tmp/supervisediumd.`$WHOAMI`"
COMMAND="/Users/kazuaki/bin/supervisediumd"

case $1 in
  "clean" )
    echo "cleaning pidfile: $PIDFILE"
    $RM -rf $PIDFILE
    ;;
  "start" | "" )
    if [ -f $PIDFILE ] ; then
      echo "supervisediumd is already running"
      exit 0
    else
      $COMMAND $PIDFILE &
      echo "starting supervisediumd $!"
    fi
    ;;
  "stop" | "shutdown" )
    echo "stopping supervisediumd..."
    if [ -f $PIDFILE ] ; then
      kill `$CAT $PIDFILE`
    fi
    ;;
  "restart" )
    echo "restarting supervisediumd..."
    if [ -f $PIDFILE ] ; then
      kill `$CAT $PIDFILE`
    fi
    while [ -f $PIDFILE ] ; do
      $SLEEP 1
    done
    $COMMAND $PIDFILE &
    ;;
  * )
    $CAT <<_EOT_
usage:
$0 [start|stop|shutdown|clean|restart]
  start :
    start supervisediumd
  stop, shutdown :
    shutdown supervisediumd
  clean :
    cleaning pidfile
  restart :
    restart supervisediumd
_EOT_
    ;;
esac

supervisediumd

#!/bin/sh

# settings
COUNT_LIMIT=20
CPU_LIMIT=750
APP="/Applications/Adium.app"
AWK="/usr/bin/awk"
GREP="/usr/bin/grep"
PS="/bin/ps"
EXPR="/bin/expr"
OPEN="/usr/bin/open"
SLEEP="/bin/sleep"
RM="/bin/rm"

PSINFO=`$PS ux | $GREP $APP | $GREP -v $GREP`
if [ -z "$PSINFO" ] ; then
  $OPEN -a $APP
fi

PIDFILE=$1
if [ -f $PIDFILE ] ; then
  if [ -z "$PSINFO" ] ; then
    echo "start supervising adium"
  else
    echo "supervisediumd is already running"
  fi
  exit 0
fi
trap "$RM -rf $PIDFILE; echo 'stopped supervisediumd'" EXIT
echo $$ > $PIDFILE
echo "start supervising adium"

COUNT=0
while [ 1 ] ; do
  PSINFO=`$PS ux | $GREP $APP | $GREP -v $GREP`
  PID=`echo $PSINFO | $AWK '{print $2}'`
  CPU=`echo $PSINFO | $AWK '{print $3 * 10}'`
  if [ $CPU -gt $CPU_LIMIT ] ; then
    COUNT=`$EXPR $COUNT + 1`
    if [ $COUNT -gt $COUNT_LIMIT ] ; then
      kill $PID
      $OPEN -a $APP
      COUNT=0
    fi
  else
    COUNT=0
  fi
  $SLEEP 1
done