新建两个文件auto与ftp.txt,将这两上文件放到同一个目录,如果/root目录,再设个crontab -e,计划系统自动传输文件,
例,每天晚上11点30分自动执行/root/auto文件:
30 23 * * * /root/auto
auto内容如下:
cat $HOME/ftp.txt|ftp -n
ftp.txt内容如下:
open 192.168.1.10
user user password
bin
prompt
hash
lcd /backup/dbsbackup
mput *.*
close
bye
AIX下配置DB2定时任务
1. 背景
由于目前安徽的系统开发中,需要分市公司的系统中,临时添加一个DB2的定时任务。由于在网上没有找到关于DB2配置定时任务的资料,决定用AIX的cron来配置DB2的定时任务。
2. 步骤
2.1. 编写sql脚本
编写DB2需要执行的sql执行脚本,并存放到AIX服务器上。
示例如下crontest.sql:
connect to tem user db2admin using db2admin;
call P_TEST();
注意:
1. sql脚本采用分号(;)分行,也可以为@或者其他,跟下面的sh中的命令有关,我个人喜欢分号分行的风格
2. sql脚本格式必须是unix格式,否则DB2无法正常运行该脚本。可以用UNIX的VI编辑器来编写,但我个人不喜欢使用VI。我的做法是用UltraEdit编写sql脚本,然后FTP传输到AIX服务器上。
UltraEdit配置如下图:
2.2. 编写sh执行文件
编写sh文件,并存放到AIX服务器上,并修改sh文件为可执。
示例如下crontest.sh:
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.
export PATH
if [ -s "$MAIL" ] # This is at Shell startup. In normal
then echo "$MAILMSG" # operation, the Shell checks
fi # periodically.
# The following three lines have been added by UDB DB2.
if [ -f /home/db2admin/das/dasprofile ]; then
./home/db2admin/das/dasprofile
fi
# The following three lines have been added by UDB DB2.
if [ -f /home/db2admin/sqllib/db2profile ]; then
./home/db2admin/sqllib/db2profile
fi
#execute sql script
db2 -svtf /home/db2admin/task/crontest.sql -z /home/db2admin/task/crontest.log
sh文件的第一部分为设置db2执行需要的环境变量(必须设置),可以根据具体的实际情况进行修改,我的做法是直接将db2admin的.profile文件中的变量直接复制过来。
修改sh文件的属性
chmod 777 crontest.sh
2.3. 配置Cron
用db2admin用户登陆AIX系统,使用crontab –e命令进行定时任务设定。crontab的具体命令参见附注中的说明。
示例如下:
00 02 * * * /home/db2admin/task/crontest.sh
设置每天02:00分定时执行crontest.sh脚本。
存盘退出即可。
对于SunOS的操作系统,默认的crontab -e采用的ED编辑器,AIX默认采用的是VI编辑器,个人觉得对VI比较友好,可以采用如下方法将SunOS的crontab -e的编辑设置为VI:
EDITOR=vi
export EDITOR
crontab -e
3. 附注
3.1. crontab
crontab命令的一般形式为: crontab [-u user] -e -l -r
其中:
• -u 用户名。如果使用自己的名字登录,就不用使用-u选项。
• -e 编辑crontab文件。不带-u选项可以编辑自己的crontab文件。
• -l 列出crontab文件中的内容。不带-u选项可以列出自己的crontab文件的内容。
• -r 删除crontab文件。小心使用哦。
crontab文件(各个用户的这个文件放在/var/spool/cron/crontab/目录中,以用户名来区别。) 每个条目中各个域的意义和格式如下:
下面就是这些域:
• 第1列分钟1~59
• 第2列小时1~23(0表示子夜)
• 第3列日1~31
• 第4列月1~12
• 第5列星期0~6(0表示星期天)
• 第6列要运行的命令
例子(注意:提交此命令会覆盖原来的文件,使用之前请做好备份。):
30 21* * * /apps/bin/cleanup.sh
上面的例子表示每晚的21:30运行/apps/bin目录下的cleanup.sh。
45 4 1,10,22 * * /apps/bin/backup.sh
上面的例子表示每月1、10、22日的4:45运行/apps/bin目录下的backup.sh。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} ;
上面的例子表示每周六、周日的1:10运行一个find命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh。
0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的11:00pm运行/apps/bin目录下的qtrend.sh。
3.2. DB2参数
DB2命令参数如下:
参数 说明 默认值
-a 显示 SQLCA OFF
-c 自动落实 ON
-e 显示 SQLCODE/SQLSTATE OFF
-f 读取输入文件 OFF
-l 将命令记录到历史文件中 OFF
-n 除去换行字符 OFF
-o 显示输出 ON
-p 显示交互式输入提示 ON
-r 将输出保存到报告文件 OFF
-s 在命令出错时停止执行 OFF
-t 设置语句终止字符 OFF(设置后,默认为;)
-v 回送当前命令 OFF
-w 显示 FETCH/SELECT 警告信息 ON
-x 不打印列标题 OFF
-z 将所有输出保存到输出文件 OFF
log_path=`db2 get db cfg for ksdbs|grep "Path to log files"|awk -F= '{print($2)}' `
first_log=`db2 get db cfg for ksdbs |grep "First active log file"|awk -F= '{print $2}'`
cur_date=`date +%Y%m%d`
func_ftp(){
cd $4
echo "������ftp������"
ftp -i -n $1 <<EOF
prompt off
user $2 $3
$7
cd $5
$8 $6
by
EOF
}
real_log_ini()
{
last_date=`awk '{if($1=="LOG") {printf "%s",$2}}' ./log.ini`
last_log=`awk '{if($1=="LOG") {printf "%s",$3}}' ./log.ini`
echo "read_log_ini"
echo "$last_date $last_log"
}
rm_path()
{
tmp_path=`echo ./$cur_date|sed 's/ //'`
if [ -d $tmp_path]; then
rm -Rf $tmp_path
fi
}
mv_log()
{
echo "mv"
echo "$1"
tmp_name=`echo $1|sed 's/ //'`
tmp_path=`echo ./$cur_date|sed 's/ //'`
echo $tmp_name $tmp_path
mv $tmp_name $tmp_path
}
cp_log()
{
tmp_name=`echo ./$cur_date/$2|sed 's/ //'`
tmp_path=`echo $log_path|sed 's/ //'`
echo cp
echo $1 $2
echo $tmp_name $tmp_path
cp $tmp_name $tmp_path
}
wr_ini()
{
echo "LOG" $cur_date $first_log|tee log.ini
}
read_log()
{
tmp_path1=`echo $log_path"*.LOG"|sed 's/ //'`
echo "read_log"
echo "$tmp_path1 $1"
temp_date=`date +%Y%m%d --date="+10 days ago"`
echo "$temp_date $last_date "
last_log1=`echo $log_path$last_log|sed 's/ //'`
if ( [[ "$temp_date" > "$last_date" ]]) ; then
ls $tmp_path1|while read log
do
echo "$log $last_log1"
if ( [[ "$log" < "$last_log1" ]]) ;
then
mv_log $log
else
break;
fi
done
return 0;
fi
return 1;
}
prune_log()
{
echo "prune log"
echo "$last_log"
if ([[ "$last_log" < "$first_log" ]]) ; then
db2 prune logfile prior to $last_log
fi
}
tar_log()
{
echo "tar_log"
tmp_path=`echo ./$cur_date|sed 's/ //'`
tmp_tar_name=`echo $cur_date.tar|sed 's/ //'`
echo "$tmp_path"
tar -cvf $tmp_tar_name $tmp_path
gzip $tmp_tar_name
func_ftp 192.168.11.12 back2 back2 /home/back/log /tmp $tmp_tar_name bin put
rm -Rf $tmp_path
}
/home/db2inst1/.profile
rm -Rf $cur_date
real_log_ini
if [ -d $cur_date ];
then
rm_path "$cur_date"
else
mkdir $cur_date
# mv_log $first_log $log_path
read_log $first_log
if [[ $? = 0 ]] ; then
wr_ini
tar_log
prune_log
fi
fi
<��>ʹ�÷�����
crontab -u db2inst1 �Ce
#���ӡ���0-59��
#Сʱ����0-23��
#���ڡ���1-31��
#�·ݡ���1-12��
#���ڡ���0-6��//0����������
0 11 * * 5 backlog.sh >> /tmp/backlog.txt
#! /bin/ksh -p
# DB2 Database Crontab Maintain -- SunGard
# DB2/KSMBCC3 STOP and Backup DB2 Database (BACKUP / START)
echo " ================================================================================"
echo " NanJing Securities for DB2/KSMBCC3 stopping at `date +'%Y-%m-%d-%H:%M:%S'` "
echo " ================================================================================"
su - db2inst1 "-c db2 backup db ksdbs online to /home/db2inst3 compress include logs"
su - db2inst1 "-c cd /home/db2inst1;sh online-ftp.sh "
# ******************ftp.sh scrip as below*******************
# please Inputs the online-ftp.sh file
# cur_date=`date +%Y%m%d`
# filename=KSDBS.*.$cur_date*.001
# func_ftp()
# {
# cd $4
# echo "������ftp������"
# ftp -i -n $1 <<EOF
# prompt off
# user $2 $3
# $7
# $9
# $8 $6
# close
# bye
# EOF
# }
#tar -cvf $cur_date.tar $filename
#func_ftp 10.253.43.84 ftp-admin ftp-admin /home/db2inst3 /temp $cur_date.tar bin put hash
echo " ================================================================================"
echo " NanJing Securities for DB2/KSMBCC3 start finished at `date +'%Y-%m-%d-%H:%M:%S'`"
echo " ================================================================================"
#! /bin/ksh -p
# DB2 Database Crontab Maintain -- SunGard
# DB2/KSMBCC3 STOP and Backup DB2 Database (BACKUP / START)
echo " ================================================================================"
echo " NanJing Securities for DB2/KSMBCC3 stopping at `date +'%Y-%m-%d-%H:%M:%S'` "
echo " ================================================================================"
su - back "-c cd /ksapp/bccbin/bcc1;../ksmbcc3 stop"
su - back "-c cd /ksapp/bccbin/bpbcc;../ksmbcc3 stop"
su - back "-c kill -2 `ps -ef |grep bclr |grep -v grep|awk '{echo $2}'`"
su - db2inst1 "-c db2 force application all"
su - db2inst1 "-c db2 deactivate db ksdbs"
su - db2inst1 "-c db2 terminate"
su - db2inst1 "-c db2stop force"
su - db2inst1 "-c db2_kill"
su - db2inst1 "-c killall"
su - db2inst1 "-c db2start"
su - db2inst1 "-c db2 backup db ksdbs to /backup/ "
su - db2inst1 "-c cd /home/db2inst1;sh offline-ftp.sh "
# ******************ftp.sh scrip as below*******************
# please Inputs the ftp.sh file
# cur_date=`date +%Y%m%d`
# filename=KSDBS.*.$cur_date*.001
# func_ftp()
# {
# cd $4
# echo "������ftp������"
# ftp -i -n $1 <<EOF
# prompt off
# user $2 $3
# $7
# $9
# $8 $6
# close
# bye
# EOF
# }
#tar -cvf $cur_date.tar $filename
#func_ftp 10.253.43.84 ftp-admin ftp-admin /home/db2inst3 /temp $cur_date.tar bin put hash
su - db2inst1 "-c db2 activate db ksdbs"
su - back "-c cd /ksapp/bccbin/bcc1;../ksmbcc3"
su - back "-c cd /ksapp/bccbin/bpbcc;../ksmbcc3"
echo " ================================================================================"
echo " NanJing Securities for DB2/KSMBCC3 start finished at `date +'%Y-%m-%d-%H:%M:%S'`"
echo " ================================================================================"
http://www.db2china.net/home/space.php?uid=2281&do=blog&id=4911
添加新评论0 条评论