設定週期性自動執行備份指令碼
首先有必要了解一下linux或者UNIX系統中的crontab命令,這個命令是用於設定週期性執行的指令。該命令從標準輸入裝置讀取指令,並將其存放在"crontab"這個檔案中,以供之後讀取和執行。通常,crontab儲存的指令被守護程式啟用。
crond是linux下的用來週期性地執行某項任務或等待某個事件的守護程式,與windows下的計劃任務類似。當安裝作業系統時會預設安裝這個服務工具,並且會啟動crond程式。
crond常常在後臺執行,每一分鐘檢查是否有預定的作業需要執行。這類作業一般稱為cron job。
linux下的任務排程分為兩類:系統任務排程和使用者任務排程。
系統任務排程就是系統週期性要執行的任務,如寫快取資料到磁碟,清理日誌等。
在/etc目錄下有個crontab檔案,這個檔案就是系統任務排程的配置檔案,來看看其中的內容:
[oracle@oracle etc]$ cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前面四行指定了用來配置crond任務的環境變數。shell指定系統要使用哪個shell,這裡是bash。
第二行指定了系統執行命令的路徑。第三行的mailto指定了crond執行任務的資訊將透過電子郵件傳送給root使用者,如果為空就表示不會傳送執行任務資訊給使用者。最後一行指定了在執行命令或者指令碼時使用的目錄。
使用者任務排程:
使用者定期要執行的任務,比如說資料備份,定期郵件提醒等。使用者可以透過crontab這個工具來制定計劃任務,所有使用者定義的crontab檔案都會被存放在/var/spool/cron目錄中,其檔名和使用者名稱相同。
說明下各個檔案的作用:
/etc/cron.deny 這個檔案中列出的使用者是無法使用crontab命令的。
/etc/cron.allow 這個檔案中列出的使用者是允許使用crontab命令的。
/var/spool/cron 所有使用者crontab檔案存放的目錄。
下面開始講講crontab命令的使用:
使用者所建立的crontab檔案中每一行都表示一項任務,每一行都有6個欄位,每個欄位都表示不同的設定,前面5個欄位是設定時間的,第6個欄位是要執行的命令(可以是系統命令,也可以是自己編寫的指令碼),其格式是:
minute hour day month week command
如下所示:
在以上欄位中可以使用如下特殊字元:
星號(*):代表所有可能的值,比如在month欄位中使用“*",表示在滿足其他欄位的制約條件後每個月都執行該命令。
逗號(,):可以在一個欄位中使用逗號隔開值來表示一個範圍,如“1,2,3,4,5,6,”。
橫槓(-):同樣在一個欄位中使用來表示一個範圍,如"1-6"表示“1,2,3,4,5,6”。
斜線(/):可以使用斜線來指定時間的間隔頻率,如“0-23/2”表示每兩個小時執行一次。同時斜線可以和星號使用,如果在minute欄位中有*/10,表示每十分鐘執行一次。
crond服務操作說明:
啟動服務:/sbin/service crond start
停止服務:/sbin/service crond stop
重啟服務:/sbin/servie crond restart
重新載入配置:/sbin/service crond reload
檢視crond服務狀態:/sbin/service crond status
在考慮向crond程式提交一個crontab檔案之前,首先要做的是設定一個環境變數,EDITOR。crond程式用它來確定使用哪個編輯器,大部分都是使用vi編輯器,那麼就到相應使用者的.bash_profile中加入一行:
export EDITOR=vi
存檔退出並使用source使其立即生效。
例子:
在/home/huan目錄下建立一個名為cronz的文字:
*/2 * * * * echo "hello" >>test.txt(注意是>>)
意思是每隔兩分鐘就向test.txt文字寫入"hello"。
然後執行crontab filename:
[huan@oracle ~]$ crontab cronz
驗證crontab檔案是否真的生成了:到/var/spool/cron目錄下檢視以使用者名稱為名稱的文字是否生成,並檢視其中的內容:
檢視test.txt,發現每隔兩分鐘就會寫入"hello":
例項:
1.每分鐘執行一次command:
1.每分鐘執行一次command:
* * * * * command
2.每小時的第3和第15分鐘執行:
3,15 * * * * command
3.在上午8點到11點的第3和第15分鐘執行:
3,15 8-11 * * * command
4.每隔兩天的上午8點到11點的第3和第15分鐘執行:
3,15 8-11 */2 * * command
5.每個星期一上午8點到11點的第3和第15分鐘執行:
3,15 8-11 * * 1
6.每晚的21:30重啟smb:
30 21 * * * /etc/init.d/smb restart
7.每月1,10,22日的4:45重啟smb:
45 4 1,10,22 * * /etc/init.d/smb restart
8.每週六週日的1:10重啟smb:
10 1 * * 6,0 /etc/init.d/smb restart
9.每天18:00至23:00之間每隔30分鐘重啟smb:
0,30 18-23 * * * /etc/init.d/smb restart
0,30 18-23 * * * /etc/init.d/smb restart
10.每個星期六晚上11:00pm重啟smb:
0 23 * * 6 /etc/init.d/smb restart
11.每一小時重啟smb:
* */1 * * * /etc/init.d/smb restart
12.晚上11點到早上7點之間,每隔一小時重啟smb:
* 23-7/1 * * * /etc/init.d/smb restart
13.每月的4號與每週一到週三的11點重啟smb:
0 11 4 * mon-wed /etc/init.d/smb restart
0 11 4 * mon-wed /etc/init.d/smb restart
14.一月一號的4點重啟smb:
0 4 1 jan * /etc/init.d/smb restart
15.每小時執行/etc/cron.hourly目錄內的指令碼:
* */1 * * * root run-parts /etc/cron.hourly
16.每個週二,週四,週六零時30分的時候執行指令碼rman.sh:
30 00 * * 2,4,6 /home/oracle/backup_script/rman.sh
17.每天零時30分的時候執行指令碼rman.sh:
30 00 * * * /home/oracle/backup_script/rman.sh
如下,想每隔一分鐘輸出時間到test.txt檔案中:
[oracle@oracle cronoracle]$ crontab crontime
[oracle@oracle cronoracle]$ crontab -l
*/1 * * * * date >> /home/oracle/test.txt
[oracle@oracle cronoracle]$ crontab -l
*/1 * * * * date >> /home/oracle/test.txt
[oracle@oracle cronoracle]$ tail -f /home/oracle/test.txt
Wed Oct 29 07:57:01 PDT 2014
Wed Oct 29 07:58:01 PDT 2014
Wed Oct 29 07:57:01 PDT 2014
Wed Oct 29 07:58:01 PDT 2014
Wed Oct 29 07:59:01 PDT 2014
下面給出一個自動執行備份的指令碼例子:
[oracle@oracle scripts]$ more rman.sh
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$HOME/bin:$PATH
rman target / > /u01/app/backup/autorman/log/rman_backup_`date "+%Y-%m-%d"`.log << EOF
run{
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/app/backup/autorman/dbfull_%d_%s';
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/backup/autorman/ctl_%F';
backup format='/u01/app/backup/autorman/dbfull_%d_%s' database plus archivelog delete input;
sql 'alter system switch logfile';
}
quit
EOF
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$HOME/bin:$PATH
rman target / > /u01/app/backup/autorman/log/rman_backup_`date "+%Y-%m-%d"`.log << EOF
run{
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/app/backup/autorman/dbfull_%d_%s';
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/backup/autorman/ctl_%F';
backup format='/u01/app/backup/autorman/dbfull_%d_%s' database plus archivelog delete input;
sql 'alter system switch logfile';
}
quit
EOF
每天零時30分執行一次/scripts/rman.sh備份指令碼。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29800581/viewspace-1313947/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設定自動匯出(exp)備份指令碼指令碼
- linux下rman增量備份指令碼以及指令碼自動執行Linux指令碼
- Oracle用指令碼定時執行備份Oracle指令碼
- 自動備份指令碼指令碼
- MySQL自動備份指令碼MySql指令碼
- oracle自動冷備份指令碼Oracle指令碼
- ORACLE自動備份shell指令碼Oracle指令碼
- rman 自動備份指令碼-windows指令碼Windows
- Oracle用指令碼執行備份Oracle指令碼
- MySQL自動備份指令碼及異地定時FTPMySql指令碼FTP
- windows下rman自動備份指令碼Windows指令碼
- svn dump 全自動備份指令碼指令碼
- oracle 自動冷備份指令碼(轉)Oracle指令碼
- linux基於cron的rman自動增量備份指令碼及設定Linux指令碼
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- Linux系統如何設定開機自動執行指令碼?Linux指令碼
- Linux、UNIX設定開機自動執行命令、指令碼配置Linux指令碼
- RMAN相容性、控制檔案自動備份、儲存時間、備份策略、備份指令碼(二)指令碼
- MySQL自動備份指令碼30天自動刪除MySql指令碼
- shell 備份檔案指令碼+自動清理指令碼
- Oracle自動備份指令碼的實現Oracle指令碼
- windows部分聯機自動備份指令碼!Windows指令碼
- suse下oracle的自動備份指令碼Oracle指令碼
- TSM+RMAN 自動備份指令碼 on aix指令碼AI
- Windows環境PgSql自動備份指令碼WindowsSQL指令碼
- UNIX crontab自動執行指令碼指令碼
- 用友U8設定了自動備份,備份失效
- 【BASIS】HANA備份指令碼,Catalog自動清理指令碼
- 備份指令碼執行失敗一例指令碼
- Linux管理指令碼之自動執行指令碼Linux指令碼
- 備份策略 增量備份中的差異備份:週日和週三執行0級備份,其他每天執行1級備份
- Xtrabackup每週增量備份指令碼程式指令碼
- 自動備份失效,手動執行指令碼報錯 ORA-31634 ORA-31664指令碼
- Oracle Windows平臺自動排程備份指令碼OracleWindows指令碼
- rman映像copy自動備份的一個指令碼指令碼
- oracle自動備份,儲存每天備份日誌的指令碼編寫Oracle指令碼
- ORACLE常用定時備份指令碼Oracle指令碼
- mysql每天定時備份指令碼MySql指令碼