星期五, 3月 18, 2005

[.Net]mod_mono_server init script

為了要讓 mod_mono_server 能在開機時自動啟動,就得自行撰寫 script.
自己嘗試了幾次,總是不如己意.大概是自己的 bash script 功力不到家吧~

只能利用 Google 大神去搜尋別人的成果.
很幸運,已經有人寫出來了.有好幾種版本:
1. mono-server.init, 這個 script 相當不錯,已經可以讓你在配置檔(/etc/xsp/mono-xsp-hosts.conf)裡面設定 host 了.同時也已經收錄,作為 Debian 官方 xsp 套件的一部分.
2. local-xsp, 這個 script 也是 for Debian 的,但沒辦法設定 host.
3. mod_mono, 我是在這兒找到的,這個可以在 fedora/red hat 裡面用,沒問題.

我最後是用了 3 的 solution,並加上了一些修改,不過你應該看的出來,更動並不大就是了 :)

#!/bin/sh
#
# chkconfig: 2345 99 01
# description: Provides ASP.NET functionality for Apache
# mod_mono Start the mod_mono-server
#

NAME=aspnet
MONOPIDFILE=/var/run/aspnet.pid

export MONO_PATH=/usr/lib/mono/1.0/

start_mod_mono() {
tmp=`ps ax | grep -m 1 "/usr/bin/mono"`
tmp=`echo $tmp | grep "/usr/bin/mod-mono-server.exe" | awk '{print $1}'`
if [ $tmp ]; then
echo -n "$NAME already started"
else
echo "Starting server $NAME"
#/usr/bin/mono /usr/bin/mod-mono-server.exe --root /usr/local/share/doc/xsp/test/ --applications /mono:. --nonstop &
#/usr/bin/mono /usr/bin/mod-mono-server.exe --root /var/www/html/mono/ --applications /mono:. --nonstop &
/usr/bin/mono /usr/bin/mod-mono-server.exe --root /usr/share/doc/xsp-0.9/xsp/test --applications /mono:. --nonstop &
sleep 3
chmod 666 /tmp/mod_mono_server
fi
}
stop_mod_mono() {
# (MO): Asking for an existing process for the mod-mono-server
# (MO): Abfragen, ob es eine Prozeß für mod-mono-server schon gibt.
tmp=`ps ax | grep -m 1 "/usr/bin/mono"`
tmp=`echo $tmp | grep "/usr/bin/mod-mono-server.exe" | awk '{print $1}'`
if [ $tmp ]; then
echo -n "Stopping mod_mono"
tmp=`ps ax | grep "/usr/bin/mono" | grep "/usr/bin/mod-mono-server.exe" | awk '{print $1}'`
kill -9 $tmp
else
echo -n "$NAME is not started"
fi
}
case "$1" in
start)
start_mod_mono
;;

stop)
stop_mod_mono
echo
;;

restart)
echo "Restarting $NAME"
stop_mod_mono
echo
sleep 1
start_mod_mono
;;

status)
tmp=`ps ax | grep -m 1 "/usr/bin/mono"`
tmp=`echo $tmp | grep "/usr/bin/mod-mono-server.exe" | awk '{print $1}'`
if [ $tmp ]; then
echo "$NAME is running";
else
echo "$NAME is not runnung";
fi
;;

*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart|status}"
exit 1
;;
esac

if [ $? -eq 0 ]; then
#echo
exit 0
else
echo " failed"
exit 1
fi

沒有留言: