一、簡介
crontab用於設置週期性被執行的命令
Linux系統中Linux調動工做分爲兩大類:
一、系統執行的工做:系統週期性所要執行的工做,如備份系統數據、清理緩存
二、我的執行的工做:某個用戶按期要作的工做,例如每隔10分鐘檢查郵件服務器是否有新信,這些工做可由每一個用戶自行設置
/etc/crtontab
系統調度的任務通常存放在/etc/crontab這個文件下,裏面存放了一些系統運行的調度程序,經過命令cat crontab查看
這些任務會在系統運行起來自動調用
/var/spool/cron
每一個用戶都會生成自動生成一個本身的crontab文件,通常位於/var/spool/cron目錄下
執行命令crontab -r 就會刪除當前用戶的crontab文件。例如你切換到suifeng帳號下,執行了該命令,那麼/var/spool/cron/suifeng文件就會刪除,若是要建立該文件只須要用crontab -e命令便可。
注意,普通用戶通常沒有權限訪問/var/spool/cron
/etc/crontab.deny文件與/etc/crontab.allow文件
一、分別表示不能使用crontab命令的用戶、以及可以使用crontab命令的用戶
二、兩個文件同時存在crontab.allow文件優先
三、兩個文件都不存在則只有root用戶才擁有調用該命令
二、語法
crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]
各個參數說明:
- -e [UserName]: 執行文字編輯器來設定時程表,內定的文字編輯器是 vi(能夠指定別的用戶,可是必須擁有權限)
- -r [UserName]: 刪除目前的時程表
- -l [UserName]: 列出目前的時程表
- -v [UserName]:列出用戶cron做業的狀態
建立定時任務
crontab -e進入文本(vi)編輯狀態
* * * * * command path // 前五個字段能夠取整數值,指定什麼時候開始工做,第六個域是字符串,即命令字段,其中包括了crontab調度執行的命令。 各個字段之間用spaces和tabs分割。
(可將命令寫入.sh腳本文件中,並賦予可執行的權限便可)
調度命令的規則:
字段名稱 |
說明 |
取值範圍 |
分鐘 |
每小時的第幾分鐘執行 |
0-59 |
小時 |
每日的第幾個小時執行 |
0-23 |
日期 |
每個月的第幾天執行 |
1-31 |
月曆 |
每一年的第幾月執行 |
1-12 |
星期 |
每週的第幾天執行 |
0-6 |
命令名稱 |
欲執行的命令及參數 |
|
crontab命令中的一些經常使用特殊符號:
符號 |
說明 |
* |
表示任什麼時候刻 |
, |
表示分割 |
- |
表示一個段,如第二段裏: 1-5,就表示1到5點 |
/n |
表示每一個n的單位執行一次,如第二段裏,*/1, 就表示每隔1個小時執行一次命令。也能夠寫成1-23/1. |
查看定時任務:crontab -l
刪除定時任務:crontab -r
三、使用示例
實例1:
每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 command
實例6:
每晚的21:30重啓smb
命令:30 21 * * * /etc/init.d/smb restart
實例7:
每個月一、十、22日的4 : 45重啓smb
命令:45 4 1,10,22 * * /etc/init.d/smb restart
實例8:
每週6、週日的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
實例10:
每星期六的晚上11 : 00 pm重啓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
實例14:
一月一號的4點重啓smb
命令:0 4 1 jan * /etc/init.d/smb restart
實例15:
每小時執行/etc/cron.hourly目錄內的腳本
命令:01 * * * * root run-parts /etc/cron.hourly
說明:run-parts這個參數了,若是去掉這個參數的話,後面就能夠寫要運行的某個腳本名,而不是目錄名
實例16:
一、天天23點59分後臺執行test.sh腳本;並將標準輸出寫入log.txt中
命令:59 23 * * * /home/suifeng/scripts/test.sh >/home/suifeng/log.txt &
二、同上
命令:59 23 * * * /home/suifeng/scripts/test.sh 1>/home/suifeng/log.txt &
三、天天23點59分後臺執行test.sh腳本;並將錯誤輸出寫書log.txt中
命令:59 23 * * * /home/suifeng/scripts/test.sh 1>/home/suifeng/log.txt &
四、天天23點59分後臺執行test.sh腳本;並將錯誤輸錯當作標準輸出(即將錯誤輸出和標準輸出所有寫入log.txt中)
命令:59 23 * * * /home/suifeng/scripts/test.sh 1>/home/suifeng/log.txt 2>&1 &
相關說明:
0表示鍵盤輸入
1表示標準輸出
2表示錯誤輸出
&表示後臺執行
>>表示追加
>表示覆蓋寫
注意:
一、當在前臺運行某個做業時,終端被該做業佔據;而在後臺運行做業時,它不會佔據終端。可使用&命令把做業放到後臺執行。
二、須要用戶交互的命令不要放在後臺執行,由於那樣子機器將會在那一直等待
三、做業在後臺運行時,同樣會將結果輸出在屏幕上,干擾你的正常工做。所以咱們最好將輸出重定向到某個文件中
四、crond服務
經過 chkconfig --list | grep cron 命令來查看cron服務的啓動狀況:
[root@***** home]# chkconfig --list | grep cron crond 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
咱們能夠看到,系統啓動級別若是是1-4,cron服務都會開機自動啓動的,咱們能夠經過以下命令來設置該服務的啓動項:
/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload
以上1-4行分別爲啓動、中止、重啓服務和從新加載配置。
要把cron設爲在開機的時候自動啓動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 便可。
查看crontab服務狀態:
service crond status
五、我的經驗總結
咱們使用這個命令大多都是運行相關的腳本文件,最多見的就是定時調用http請求進行數據採集或者數據庫的備份等等。所以當咱們本身所寫的腳本文件中含有文件引入時,最好採用絕對路徑,不然將會引入失敗從而致使定時任務失敗。