歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux之循環執行任務

Linux之循環執行任務

日期:2017/2/28 14:35:45   编辑:Linux教程

簡介

在Linux下,crond服務是實現周期性計劃任務的工具之一,crond服務能在規定的時間去執行設置的命令、腳本,功能類似windows下的“計劃任務”。對一個多用戶多任務的linux系統中,每個用戶都可以設置自己的crontab,並且在/var/spool/cron/這個目錄下會創建一個與創建計劃任務用戶同名的檔案,檔案的內容就是此用戶使用“crontab -e”命令制作的計劃任務。而每一次計劃任務的執行,crond都會把執行的日志記錄到/var/log/cron這個日志檔案中,通過這個檔案就會知道在某個時間,crond程序執行了哪個指令。作為系統管理員可以限定crontab的使用者,/etc/cron.allow與/etc/cron.deny這兩個檔案就是來做權限的設定的,一般只保留一個檔案即可,假如只保留/etc/cron.deny這個檔案,檔案中的內容是一行一個用戶的用戶名,表示在這個檔案的用戶不能使用計劃任務的功能,而沒有在這個檔案內的其他用戶則可以使用計劃任務的功能。

命令格式

在制定計劃任務時,我們使用crontab這個工具來設定,crontab的常用選項是“-e”與“-l”。
-e:edit,表示編輯計劃任務列表
-l:list,表示列出計劃任務列表
[root@zhaochj ~]# crontab -e

計劃任務的設置會涉及到兩個要素:一是時間;二是指令。也就是在什麼時間會執行什麼樣的指令。
cron的語法格式:五個時間字段,一個指令字段
分 時 日 月 周 指令

時間的取值范圍:


field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
在這五個時間字段時可以使用一些特殊的符號:
* :表示任何時刻
,:表示時間分割,比如在“分”這個字段裡的值為“1,15”表示第一分,第15分兩個時刻
- :表示一個時間段,如在“時”這個字段裡的值為“2-5”表示零晨2點到零晨5點這個時間范圍內
/n:n表示一個整數,如在“日”這個字段裡的值為“*/1”表示每隔一天執行一次命令
時間段的一些示例

43 21 * * * 21:43 執行

15 05 * * * 05:15 執行

0 17 * * * 17:00 執行

0 17 * * 1 每周一的 17:00 執行

0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 執行

0-10 17 1 * * 毎月1日從 17:00到17:10 毎隔1分鐘 執行

0 0 1,15 * 1 毎月1日和 15日和周一的 0:00 執行

42 4 1 * *     毎月1日的 4:42分 執行

0 21 * * 1-6   周一到周六 21:00 執行

0,10,20,30,40,50 * * * * 每隔10分 執行

*/10 * * * *        每隔10分 執行

* 1 * * *         從1:0到1:59 每隔1分鐘 執行

0 1 * * * 零晨1:00 執行

0 */1 * * *        毎時0分 每隔1小時 執行

0 * * * *         毎時0分 每隔1小時 執行

2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 執行

30 5 1,15 * * 每月1日 和 15日的 5:30 執行

一個備份腳本與cron結合達到自動備份的實例

備份腳本如下:
[root@zhaochj ~]# vim autoback.sh
#!/bin/sh
#
#author: Jack.zhao
#Date: 2013-11-29
#Email: [email protected]
#Description: This script backup file
DATE=$(/bin/date +%Y%m%d)
BASENAME=$(basename $1)
[ -d /backup ] || /bin/mkdir /backup
/bin/tar -czf /backup/$BASENAME.$DATE.tar.gz $1 1> /dev/null 2>> /backup/$BASENAME.error.log
if [ $? -eq 0 ]
then
echo "$1 $DATE backup successfully" >> /backup/$BASENAME.success.log
else
echo "ERROR:failure $1 $DATE backup!" >> /backup/$BASENAME.error.log
fi

[root@zhaochj ~]# chmod +x /root/autoback.sh

此腳本的使用方法:
[root@zhaochj ~]# ./autoback.sh /etc/fstabefsg

腳本准備好了,那來設置計劃任務,如果我們想對/home目錄做一個自動備份工作,要求是每個月的1號、15號的零晨3點15分做備份工作:
[root@zhaochj ~]# crontab -e
15 3 1,15 * * /root/autoback.sh /home

Copyright © Linux教程網 All Rights Reserved