1. 程式人生 > 其它 >linux crond命令進行定時任務設定

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 ,賦予指令碼執行許可權

再執行chown oracle auto_create_ table.sh

切換到oracle使用者,執行命令crontab -e

增加一行

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

儲存退出

切換回root使用者,執行命令systemctl restart crond