Java 代码:
package test.helloworld.cmd;
// by fallseir 2010-03-26
public class ShutdownHook {
public static void main(String args[]){
System.out.println("start");
ShutdownHook cmd=new ShutdownHook();
cmd.installShutdownHook();
try{
Thread.sleep(1000*10*10);
}catch(InterruptedException e){
e.printStackTrace();
}
}
private void shutdown(){
System.out.println("shutdown");
}
private void installShutdownHook(){
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run(){
shutdown();
}
});
}
}
sh 代码:
#!/bin/sh
# -----------------------------------------------------------------------------
# fallseir 2010-03-26
# Start/Stop Script for the test.helloworld.cmd.ShutdownHook system
# run.sh start|stop|check
#
base="."
lib="$base/lib"
log="$base/log"
app="run"
mainCls="test.helloworld.cmd.ShutdownHook"
pid="$app"".pid"
cp=""
#cp="$cp:$lib/log4j-1.2.13.jar"
cmd="java -cp $cp $mainCls $args"
ARG=$1
if [ "x$ARG" = "x" ] ; then
ARG="start"
else
shift
fi
if [ ! -d "$log" ] ; then
mkdir "$log"
fi
if [ "$ARG" = "start" ] ; then
AppErr="$log/$app.err"
AppOut="$log/$app.out"
# 备份历史日志
if [ -f "$AppErr" ] ; then
mv "$AppErr" "$AppErr".`date +%Y%m%d`"."$$
fi
if [ -f "$AppOut" ] ; then
mv "$AppOut" "$AppOut".`date +%Y%m%d`"."$$
fi
# 在后台启动应用
echo "$cmd $@ > $AppOut 2> $AppErr"
$cmd "$@" > "$AppOut" 2> "$AppOut" &
# 记录进程ID
if [ ! -z "$pid" ] ; then
echo $! > $pid
fi
# 使用USR2 进行简单通信
#elif [ "$ARG" = "check" ] ; then
# if [ ! -z "$pid" ]; then
# echo "check: `cat $pid`"
# kill -USR2 `cat $pid`
# else
# echo "Kill failed: \$pid not set"
# fi
elif [ "$ARG" = "stop" ] ; then
# kill 应用进程
if [ ! -z "$pid" ]; then
echo "Killing: `cat $pid`"
kill -15 `cat $pid`
rm $pid
else
echo "Kill failed: \$pid not set"
fi
fi
