linux crond命令進行定時任務設定
阿新 • • 發佈:2021-07-22
任務背景
由於專案處理的資料量較大,資料使用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