Linux中的计划任务—Crontab调度重复执行的任务
文章目錄
- 目標
- 背景介紹
- Crontab是什么
- Crontab實踐
- 安裝并檢查Crontab服務
- 1、檢查cron服務:
- 2、安裝cron
- 案例實現
- Crontab的基本組成
- Crontab的配置文件格式
- 小栗子
- eg1.每晚的21:30重啟apache
- eg2.每月1,10,22日的4:45重啟apache
- eg3.每月1-10日的4:45重啟apache
- eg4.每隔兩分鐘重啟apache
- eg5.每晚11-早上7點之間,每隔一個小時重啟apache
- eg6.每天18:00-23:00之間每隔30分鐘重啟apache
- Crontab工具的使用
- 1、查看某用戶的計劃任務列表:
- 2、修改某用戶的計劃任務:
- 3、刪除crontab文件
- 4、查看生成的最終計劃任務文件:
- 5、crontab日志位置:
- Crontab的配置文件
- Crontab的日志
- Crontab的常見錯誤
- Crontab的常見錯誤之環境變量
- Crontab的常見錯誤之命令行操作
- Crontab的常見錯誤之分鐘設置誤用
- Crontab綜合案例解析
- && 和|| 和 ;的區別
- 定時備份oracle數據
目標
本博文的主要目的是讓筆者和讀者可以了解并掌握以下內容:
1、Crontab的基本概念
2、Crontab的基本組成
3、操作Crond服務
4、配置系統和用戶計劃任務
5、監控計劃任務日志
背景介紹
在工作中你是否也碰到過這種定時重復的工作呢?
Crontab可以幫助你從這些定時重復的工作中解脫出來
Crontab是什么
- 1.Crontab是一個用于設置周期性執行任務的工具;
- 2.周期性執行的任務我們稱為Cron Job;
- 3.周期性執行的任務列表我們稱為Cron Table。
Crontab實踐
安裝并檢查Crontab服務
安裝并檢查crontab服務
1、檢查cron服務:
– 檢查crontab工具是否安裝:crontab -l
– 檢查crond服務是否啟動:service crond status
2、安裝cron
– yum install vixie-cron
– yum install crontabs
注意:
1、檢查crontab服務狀態:service crond status
控制服務的一些提示:service crond
2、檢查Apache(阿帕奇)服務狀態:service httpd status
控制服務的一些提示:service httpd
(檢查服務狀態,服務名后面一般都加d,如crond、httpd)
案例實現
每分鐘都打印當前時間到一個文件中
service crond status #查看服務是否啟動<br>service crond start #如沒有啟動服務,啟動服務<br>crontab -l #查看當前定時任務列表<br>crontab -e #打開定時任務列表文件,進行編輯<br>*/1 * * * * date >> /tmp/log.txt #在最后一行插入內容,保存退出(注意*間的空格)<br>tail -f /tmp/log.txt #監聽log.txt文件內容(動態刷新)date #查看當前時間Crontab的基本組成
crontab的基本組成:
- 1)系統服務CROND:
每分鐘都會從配置文件刷新定時任務 - 2)配置文件:
文件方式設置定時任務 - 3)配置工具crontab:
用于調整定時任務
Crontab的配置文件格式
小栗子
eg1.每晚的21:30重啟apache
30 21 * * * service httpd restarteg2.每月1,10,22日的4:45重啟apache
45 4 1,10,22 * * service httpd restarteg3.每月1-10日的4:45重啟apache
45 4 1-10 * * service httpd restarteg4.每隔兩分鐘重啟apache
*/2 * * * * service httpd restart 1-59/2 * * * * service httpd restart(奇數分鐘重啟)0-58/2 * * * * service httpd restart(偶數分鐘重啟)eg5.每晚11-早上7點之間,每隔一個小時重啟apache
* 23-7/1 * * * service httpd restarteg6.每天18:00-23:00之間每隔30分鐘重啟apache
0,30 18-23 * * * service httpd restart 0-59/30 18-23 * * * service httpd restart
Crontab工具的使用
通過 man crontab 或者 crontab --help 查看
1、查看某用戶的計劃任務列表:
crontab -u 用戶名 -l(默認-u為當前登錄用戶)2、修改某用戶的計劃任務:
crontab -e3、刪除crontab文件
crontab -r [username]root可以指定用戶刪除其他用戶的crontab文件。 其他用戶只可以刪除自己的crontab文件
4、查看生成的最終計劃任務文件:
/var/spool/cron5、crontab日志位置:
/var/log/cronCrontab的配置文件
1、用戶的crontab定時任務保存文件:
/var/spool/cron/root
或者:/var/spool/cron/tabs/root
2、全局(系統)配置文件:
– /etc/crontab
– 注意格式
1.利用命令crontab -e 進入的是用戶級別的計劃任務
2.用 vi /etc/crontab 進入后編輯的是系統級的計劃任務
Crontab的日志
- /var/log/cron 保存著所有的crontab的操作
- /var/spool/mail/ 下也會以郵件的方式發送日志信息
Crontab的常見錯誤
Crontab的常見錯誤之環境變量
不可引用環境變量
cd ~ls -a
可以看到有.bash_profile文件
vim .bash_profile
新增一個環境變量
更新到環境變量:
source .bash_profile檢驗:
echo $APPDIR 可以正常顯示,能夠被識別
但是在下面這條命令行添加在crontab里不能被識別
————————————————————————
在/var/log/cron任務執行日志中可以看到,但是cat打開/tmp/appdir.log內容是空的
Crontab的常見錯誤之命令行操作
- 1、test 表達式 測試后面的表達式是否真實,但必須加空格 (如果不加空格,那么該命令恒為正確的。)例如: test 1 = 0 如果結果是0 ,那么是正確的(與C語言相反)
- 2.通過echo $?來查看上一次的執行結果。
- 3、date +%w 這個是顯示今天是星期幾
- 4、需要注意的是在crontab文件中,%需要進行轉義
第三個和第五個域之間執行的是或操作 即 星期幾和每月幾號是或關系
例:4月的第一個星期日早晨1時59分運行a.sh
①59 1 1-7 4 0 /root/a.sh 錯誤的寫法
②59 1 1-7 4 * testdate +%w-eq 0 && /root/a.sh 正確的寫法
Crontab的常見錯誤之分鐘設置誤用
兩小時運行一次date命令
錯誤:
* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date正確:
0 */2 * * * dateCrontab綜合案例解析
crontab最小時間是1分鐘,控制1分鐘執行多次
本應該是同時執行,但第二條被推遲了30s執行,效果就是1分鐘執行了2次
&& 和|| 和 ;的區別
- command1 && command2: &&左邊的command1執行成功(返回0表示成功)后,&&右邊的command2才能被執行。
- command1 || command2: 如果||左邊的command1執行失敗(返回1表示失敗),就執行&&右邊的command2。
- command1;command2: 命令順序執行,不管前面的是否正確后面的都會依次執行
定時備份oracle數據
#!/bin/bash export ORACLE_BASE=/data/oracle export ORACLE_HOME=/oracle/product/102 export ORACLE_SID=sidname export ORACLE_TERM=xterm export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export LANG=C export NLS_LANG=AMERICAN_AMERICA.AL32UTF8#以上代碼為Oracle數據庫運行賬號oracle的系統環境變量設置,必須添加,否則crontab任務計劃不能執行。 date=date +%Y_%m_%d #獲取系統當前日期時間 days=5 #設置刪除5天之前的備份文件 orsid=ip:port/sidname #Oracle數據庫服務器IP、端口、SID orowner=master_ccpx2 #備份此用戶下面的數據 bakuser=master_ccpx2 #用此用戶來執行備份,必須要有備份操作的權限 bakpass=passwd #執行備注的用戶密碼 bakdir=/aaa/bbb/oracle_data #備份文件路徑,需要提前創建好 bakdata=$orowner"_"$date.dmp #備份數據庫名稱 baklog=$orowner"_"$date.log #備份執行時候生成的日志文件名稱 ordatabak=$orowner"_"$date.tar.gz #最后保存的Oracle數據庫備份文件 cd $bakdir #進入備份目錄 mkdir -p $orowner #按需要備份的Oracle用戶創建目錄 cd $orowner #進入目錄 exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #執行備份 tar -zcvf $ordatabak $bakdata $baklog #壓縮備份文件和日志文件 find $bakdir/$orowner -type f -name "*.log" -exec rm {} \; #刪除備份文件 find $bakdir/$orowner -type f -name "*.dmp" -exec rm {} \; #刪除日志文件 find $bakdir/$orowner -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #刪除5天前的備份總結
以上是生活随笔為你收集整理的Linux中的计划任务—Crontab调度重复执行的任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle-使用awrrpt.sql生
- 下一篇: Linux中yum和apt-get