打算用linux去定時select自己每天上班都要查的數據。但對於linux的定時任務一無所知,so,從零學起:
Linux裡面使用crontab命令來執行定時任務。
1,查看當前有哪些定時任務
crontab -l
2,編寫新的定時任務。在這裡編輯任務的操作模式和 vi 一樣。
crontab -e,
3,保存定時的結果
例1:每天5:30執行ls命令,並把結果輸出到/jp/test文件中
30 5 * * * ls >/jp/test 2>&1
注:2>&1 表示執行結果及錯誤信息。
計劃任務的格式共分為六段,前五段為時間設定段,第六段為所要執行的命令段,
格式如下:mi hh dd mm dw command
解釋:
mi 每小時的第幾分鐘執行該任務 ,取值范圍 0~59
hh 每天的第幾個小時執行該任務 ,取值范圍 0~23
dd 每月的第幾天執行該任務 ,取值范圍 1~31
mm 每年的第幾個月執行該任務 ,取值范圍 1~12
dw 每周的第幾天執行該任務 ,取值范圍 0~6,0表示周日
command 指定要執行的程序
舉例如下:
5 * * * * ls 指定每小時的第5分鐘執行一次ls命令
30 5 * * * ls 指定每天的 5:30 執行ls命令
30 7 8 * * ls 指定每月8號的7:30分執行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30執行ls命令
30 6 * * 0 ls 指定每星期日的6:30執行ls命令 [ 注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。 ]
30 3 10,20 * * ls 每月10號及20號的3:30執行ls命令 [注:“,”用來連接多個不連續的時段 ]
25 8-11 * * * ls 每天8-11點的第25分鐘執行ls命令 [注:“-”用來連接連續的時段 ]
*/15 * * * * ls 每15分鐘執行一次ls命令 [即每個小時的第0 15 30 45 60分鐘執行ls命令 ]
30 6 */10 * * ls 每個月中,每隔10天6:30執行一次ls命令[即每月的1、11、21、31日是的6:30執行一次ls命令。 ]
簡單的了解了crontab的用法後,開始建立第一個定時任務,腳本如下:
cd /home/Oracle
. .bash_profile
sqlplus userid/password@TNS_NAME <<!
select * from tab;
exit;
!
結果報錯:
1, .bash_profile: file not found
2, sqlplus :command not found
第一個錯誤的解決方法是:使用source /home/oracle/.bash_profile,既然你找不到,我就給你個絕對路徑。
第二個錯誤的解決方式和第一個類似,也是使用絕對路徑,但還是想不通。既然已經成功source 環境變量了,系統就應該可以成功找到sqlplus的路徑了的。
修改後的腳本是
#!/bin/bash
cd /home/oracle
source /home/oracle/.bash_profile
/home/oracle/oracle/product/11.2.0/client/bin/sqlplus userid/password@TNS_NAME <<!
select * from tab;
exit;
!
總結:在腳本裡面使用命令最好把命令的絕對路徑加上