linux crond命令进行定时任务设置

任务背景

由于项目处理的数据量较大,数据使用oracle数据库,数据是需要每个月建一张新表,数据只保留三个月的数据以便查证,其余的数据进行备份。

需要每个月就要创建新的数据库表,创建表空间以及表索引,每次都需要人工创建比较麻烦,所以就写了一个脚本进行自动创建,使用crond命令进行定时执行

首先需要创建一个shell脚本

1、设置系统变量和脚本所需的变量,指定存放的目录不存在则创建

#
#设置系统环境变量
#
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH

#
#指定脚本必需的变量
#1.表空间文件存放路径
#3.数据库hsp用户的密码
#
dir_ts="/u01/app/oracle/oradata/orcl"
hsp_passwd=""

#
#判断变量是否已经设置
#如果有没设置的变量则退出
#
if [ -z ${dir_ts} ] || [ -z ${hsp_passwd} ];then
  echo "Required variables missing(缺少必需的变量)"
  exit 1
fi

#
#指定日志存放目录,如果目录不存在则创建
#
log_dir=/tmp/create_tbs_log
if [ ! -d ${log_dir} ]; then
  mkdir ${log_dir}
fi

2、数据库表明是 receive_202105格式,所以获取当前时间,提前2个月进行创建,所以要判断本月创建是那年那个月的表名

#
#获取当前月份,格式为YYYYMM
#
month=`date +%Y%m`

#
#从获取到的月份中分离出年份和月份
#
year_now=`echo ${month}|cut -c 1-4`
month_now=`echo ${month}|cut -c 5-6`

#
#判断月份
#如果是11月,则将年份增加1,月份改为01
#如果是12月,则将年份增加1,月份改为02
#如果是其它月份,则直接月份增加1
#
if [ ${month_now} == 11 ];then
  month_next="01"
  year_next=`expr ${year_now} + 1`
  month="${year_next}${month_next}"
elif [ ${month_now} == 12 ];then
  month_next="02"
  year_next=`expr ${year_now} + 1`
  month="${year_next}${month_next}"
else
  let month+=2
fi

3、使用sysdba用户进行创建表空间,并将执行的结果保存早日志文件,创建表空间及表、索引的命令可以找开发同学获取

#
#以sysdba用户创建表空间
#将命令执行结果保存到变量create_tablespace
#
create_tablespace=`sqlplus / as sysdba << EOF
create tablespace hsp_${month} datafile ${dir_ts}/hsp_${month}.dbf size 100M autoextend on next 100M maxsize unlimited;
alter tablespace hsp_${month} add datafile ${dir_ts}/hsp_${month}_1.dbf size 100M autoextend on next 100M maxsize unlimited;
exit;
EOF`

#
#将变量create_tablespace的值保存到日志文件
#以便出现问题后可以查询
#
echo ${create_tablespace} > ${log_dir}/create_tablespace.log

#
#判断命令执行结果中是否有错误
#如果有错误则异常退出,nagios可据此报警
#
err_create_ts=`echo ${create_tablespace} |grep -i error |wc -l`
if [ ${err_create_ts} != 0 ];then
  echo "大网关数据库自动创建表空间时出现错误"
  exit 1
fi

4、使用用户进行创建表,增加索引,并将执行结果保存,使用 `echo ${file} | grep -i error | wc -l` 命令查看是否执行有错

err_create_tbs=`echo ${create_tables}|grep -i error |wc -l`
if [ ${err_create_tbs} != 0 ];then
  echo "大网关数据库自动创建表时出现错误"
  exit 1
fi

 

使用crontab命令创建定时任务

以root用户登录服务器, 把shell脚本auto_create_ table.sh放到/home/oracle目录下

执行命令chmod +x auto_create_ table.sh ,赋予脚本执行权限

linux crond命令进行定时任务设置

 

再执行chown oracle auto_create_ table.sh

linux crond命令进行定时任务设置 

 

切换到oracle用户,执行命令crontab -e

增加一行

00 01 25 * * /home/oracle/auto_create_ tableV1.sh

linux crond命令进行定时任务设置

 

保存退出

 

切换回root用户,执行命令systemctl restart crond

 

linux crond命令进行定时任务设置

上一篇:Linux | Linux下用于查看系统当前登录用户信息的4种方法


下一篇:Ubuntu常用命令大全