这个脚本是通过命令的方式来启动不同的jetty
假设这个文件名为jetty-root.sh 放在/home/chris 下 我们可以通过ln命令设置快捷方式jj
ln -s /home/chris/jetty-root.sh /usr/bin/jj
/data/app/jetty-chris 的启动命令为 jj start chris 停止命令为 jj stop chris 查看日志jj logf chris
/data/app/jetty-hudson 的启动命令为 jj start hudson 停止命令为 jj stop hudson 查看日志jj logf hudson
#!/bin/bash
ME=`basename $0`
ArgCount=$#
# 启动命令 stop | start | log | logn | logf
CMD=$1
# 启动jetty的唯一标识 目录如果为jetty-chris则启动这个jetty 使用 start chris
KEY=$2
NOWDAY=`date +%Y`_`date +%m`_`date +%d`
WHO=`whoami`
if [ ! $ArgCount -eq 2 ]; then
echo " Arg count must be 2"
echo " {stop | start | log | logn | logf} {key}"
echo " log is cat log file"
echo " logn is tail log file last 1000 line"
echo " logf is tail -f log file"
exit
fi
if [ $CMD != "start" -a $CMD != "stop" -a $CMD != "log" -a $CMD != "logf" -a $CMD != "logn" ]; then
echo "arg 1 must be start or stop or log or logf or logn"
exit
fi
#要同时启动多个jetty 要修改对应jetty.xml的端口 避免出现端口相同的情况
XMLFILE="/data/app/jetty-$KEY/etc/jetty.xml"
echo -n "XML file $XMLFILE"
if [ -f "$XMLFILE" ]; then
echo " is exist."
else
echo " is NOT exist!"
exit
fi
JAVA_HOME=/data/app/java
CLASSPATH=/data/app/java/lib/dt.jar:/data/app/java/lib/tools.jar
export JAVA_HOME CLASSPATH
export LANG=zh_CN.UTF-8
export JETTY_HOME=/data/app/jetty-$KEY
export JETTY_RUN=/data/app/jetty-$KEY/logs
export JETTY_LOGS=/data/app/jetty-$KEY/logs
export JETTY_ARGS=/data/app/jetty-$KEY/etc/jetty-logging.xml
export JAVA_OPTIONS='-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:PermSize=64M -XX:MaxPermSize=128M -Xmx2048m -DOPTIONS=server'
PIDCOUNT=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME | awk '{print $2}' | wc -l`
LOGFILE=`ls -t $JETTY_HOME/logs/*.stderrout.log | awk 'NR==1'`
case $CMD in
logf)
tail -f $LOGFILE
;;
logn)
tail -n1000 $LOGFILE
;;
log)
more $LOGFILE
;;
start)
if [ "$PIDCOUNT" -gt 1 -o "$PIDCOUNT" -eq 1 ]; then
echo "There are too many process :"
ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME
exit 1
fi
if [ "$PIDCOUNT" -eq 0 ]; then
echo "Let's start it......"
/data/app/jetty-$KEY/bin/jetty.sh start
sleep 1
echo "It's stared"
exit 0
fi
;;
stop)
if [ "$PIDCOUNT" -gt 1 ]; then
echo "There are too many process :"
ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME
exit 1
fi
if [ "$PIDCOUNT" -eq 0 ]; then
echo "It had been down!"
exit 1
fi
if [ "$PIDCOUNT" -eq 1 ]; then
echo "Let's stop it......"
PID=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME | awk '{print $2}'`
kill $PID
echo "Sending STOP ... Waiting ..."
for i in {60..0}; do
PIDCOUNT=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME | awk '{print $2}' | wc -l`
if [ "$PIDCOUNT" -eq 1 ]; then
echo "It's running yet...$i"
sleep 1
else
echo "$JettyHome has been down"
exit
fi
done
PIDCOUNT=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME | awk '{print $2}' | wc -l`
if [ "$PIDCOUNT" -eq 1 ]; then
PID=`ps -ef | grep "jetty-$KEY" | grep -v 'grep' | grep -v $ME | awk '{print $2}'`
kill -9 $PID
echo "Force to kill -9 pid:$PID"
echo "sleep 5 second"
sleep 5
echo "$PID has been down"
exit
fi
fi
;;
esac