Shell指令碼之crontab定時任務
crontab定時任務
crondtab是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護程序,與windows下的計劃任務類似,crondtab程序每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
每個使用者都有自己的排程crontab,可以使用crontab -u user -e或切換到user使用vim /etc/crontab(也可crontab -e)編輯crontab定時任務排程表。crontab命令選項意義如下:
linux還定義了兩個控制檔案來控制crontab,它們是:/etc/cron.allow和/etc/cron.deny。/etc/cron.allow表示哪些使用者能使用crontab命令,若cron.allow為空則表明所有使用者都不能安排定時任務;若該檔案不存在則會檢視/etc/cron.deny,只有不包含在這個檔案中的使用者才可以使用crontab命令;若cron.deny為空則任何使用者都可以安排作業。兩個檔案同時存在cron.allow優先,同時不存在只有root使用者能安排定時任務。
開啟/etc/crontab:
crontab檔案的基本格式 :
* * * * * command
minute hour day month week command
其中:
minute: 表示分鐘,可以是從0到59之間的任何整數(每分鐘用*或者 */1表示)。
hour:表示小時,可以是從0到23之間的任何整數(0表示0點)。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。
command:要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案。
在以上各個欄位中,還可以使用以下特殊字元:
星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。
crontabcrontab實現定時檔案備份的例子,shell指令碼實現備份功能,在crontab中定時每天執行指令碼。指令碼名稱為fileback.sh.
- #使用root許可權將/etc目錄下的所有內容進行備份
- #fileback.sh
- #!/bin/bash
- DIRNAME=`ls /root | grep bak` #獲取/root/bak字串
- if [ -z "$DIRNAME" ] #如果/root/bak不存在,則建立一個
- then
- mkdir /root/bak
- cd /root/bak
- fi
- #獲取當前年、月、日資料儲存到YY、MM、DD變數中
- YY=`date +%y`
- MM=`date +%m`
- DD=`date +%d`
- BACKETC=$YY$MM$DD_etc.tar.gz #備份檔案的名字
- tar zcvf $BACKETC /etc #將/etc所有檔案打包
- echo "fileback finished!"