.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