Tag: X shell

HelloWorld Java 1: ShutdownHook & start/stop Script

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

使用mysqldump进行单表备份

写了一个shell脚本 对数据库中每个表进行备份 这样可以方便的在表中进行筛选

bak_db_table.sh
————————————————————–

# bak_db_table.sh db db_host db_user db_passwd > log.txt
# by fallseir at 20081010

if [ $1 ] # 如果没有参数
then
echo database $1;
else
echo 'backup database tables to gzip files
sh bak_db_table.sh db [db_host] [db_user] [db_passwd]
'; exit;
fi

# 参数赋值
[ $1 ] && db=$1
[ $2 ] && dbh=$2
[ $3 ] && dbu=$3
[ $4 ] && dbp=$4

# 配置数据库参数
[ $dbh ] && dbh="-h"$dbh
[ $dbu ] && dbu="-u"$dbu
[ $dbp ] && dbp="-p"$dbp

#如果不存在 以db命名的目录 则创建
[ -a $db ] || mkdir $db; echo "mkdir $db"

# 获取数据库中的表列表
echo 'list=(`echo "show tables;"|mysql -h$dbh -u$dbu -p$dbp $db`)'
list=(`echo "show tables;"|mysql $dbh $dbu $dbp $db`)
# 获取表个数
tbcount=$((${#list[@]}-2))
if [ $tbcount= -2 ] # 如果表不存在 或数据库连接失败
then
  echo empty tables in $db or connent failed! ; exit 1;
fi
echo table count: $tbcount

# 对每个表进行备份 并压缩
# 使用gzip -d $file 进行解压
# 使用 mysql $database < $bakfile 进行恢复
for (( i = 1 ; i < ($tbcount+1) ; i ++ ))
do
  table=${list[$i]}
  echo back table $table
  mysqldump $dbh $dbu $dbp $db $table | gzip -c > $db/177.6.db.$db.$table.gz
# $? 前一命令的返回值, 0 为成功 1为失败 但mysqldump没有遵守这个约定
  echo back table $table $?
  sleep 10
done

Copyright © 1996-2010 飞扬轻狂's blog. All rights reserved.
iDream theme by Templates Next | Powered by WordPress