歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux定期執行任務 實現教程

Linux定期執行任務 實現教程

日期:2017/3/2 9:42:27   编辑:關於Linux

今天在看一個關於服務器性能測試的視頻,視頻中說到了一個Linux下的crontab命令,好陌生的一個命令啊,然後查閱資料,寫了個小Demo把這個crontab相關的知識總結了一遍,對於我來說,這又是一個新的知識點,每天都在進步。

去/etc目錄下看看
先去Ubuntu的/etc目錄下看看,我們都知道/etc目錄主要用來存放系統中的配置文件,基本上所有的配置文件都可以在這裡找到。運行以下命令看看:

ls /etc/cron*
這個命令會列出/etc目錄下所有以cron開頭的文件和文件夾。可以看到主要有以下文件夾:

/etc/cron.hourly 這裡存放了每小時需要運行的腳本/etc/cron.daily 這裡存放了每天需要運行的腳本/etc/cron.weekly 這裡存放了每個星期需要運行的腳本/etc/cron.monthly 這裡存放了每月需要運行的腳本/etc/cron.d 如果既不是按小時,也不按天,周和月來運行,就放在這個文件夾
原來,我們可以把我們需要定時運行的腳本放到對應的文件夾中,系統就會定時運行對應的腳本了。那麼系統是怎麼做到的呢?

在/etc目錄下,還有一個crontab文件,該文件內容如下:

# /etc/crontab: system-wide crontab# Unlike any other crontab you don't have to run the `crontab'# command to install the new version when you edit this file# and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )#
如果你英語不錯的話,閱讀上面的英文注釋就可以看懂了。crontab文件是一個系統級別的配置文件,裡面配置了什麼時候去運行什麼文件的規則。Linux會定期去掃描對應的文件夾,運行裡面的腳本。這就完成了定時執行任務的功能。

cron服務
cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。由於cron 是Linux的內置服務,但它不自動起來,可以用以下的方法啟動、關閉這個服務:

service cron start //啟動服務
service cron stop //關閉服務
service cron restart //重啟服務
service cron reload //重新載入配置
cron命令每分鐘會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。而Linux任務調度的工作主要分為以下兩類:

系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存;
個人執行的工作:某個用戶定期要做的工作,例如每天備份數據庫等。
在/var/spool/cron/目錄下是所有用戶的crontab文件,你也可以去看看。上面說到的/etc下的配置都是屬於系統級別的,那麼個人級別的定時執行如何來做呢?這就需要說到下面的crontab命令了。

crontab命令
cron服務提供crontab命令來設定cron服務的,以下是這個命令的一些參數與說明:

crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab -l //列出某個用戶cron服務的詳細內容
crontab -r //刪除沒個用戶的cron服務
crontab -e //編輯某個用戶的cron服務
如果不指定用戶,就是當前系統的登陸用戶。

當你輸入命令:crontab -e時,就會出現一個文件,讓你填寫對應的定時規則,這個規則是什麼?

定時規則
看這條規則:

25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
這就是一條規則,表示每天的6點25分執行對應的腳本。沒有看明白,不要緊,容我慢慢道來。

以下是 crontab 文件的格式:

{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
minute:區間為0–59;
hour:區間為0–23;
day-of-month:區間為0–31;
month:區間為1–12;1是1月,12是12月;
Day-of-week:區間為0–6;周日是0。
除了數字還有以下幾個特殊的符號需要特殊說明:
*:代表所有的取值范圍內的數字;
/:代表每的意思,”*/5″表示每5個單位;
-:代表從某個數字到某個數字;
,:分開幾個離散的數字。

以下舉幾個例子說明問題:

每五分鐘執行 */5 * * * * /home/jelly/test.sh
每小時執行 0 * * * * /home/jelly/test.sh
每天執行 0 0 * * * /home/jelly/test.sh
每周執行 0 0 * * 0 /home/jelly/test.sh
每月執行 0 0 1 * * /home/jelly/test.sh
每年執行 0 0 1 1 * /home/jelly/test.sh

每天早上6點 0 6 * * * /home/jelly/test.sh
每兩個小時 0 */2 * * * /home/jelly/test.sh

晚上11點到早上8點之間每兩個小時0 23-7/2 * * * /home/jelly/test.sh

1月1日早上4點0 4 1 1 * /home/jelly/test.sh
我想這下你應該明白了,如果還沒有明白,沒問題,再來個實例,你就能明白了。

一個小Demo
先准備以下這麼一段簡短的腳本:

#!/bin/bashvar="http://www.jellythink.com"

echo $var

exit 0
保存為文件backupDemo.sh。
bash腳本不懂,沒關系,看這裡:

《Linux Shell簡明教程(一)》
《Linux Shell簡明教程(二)》
在終端輸入以下命令:

crontab -e
在顯示的文件末尾添加以下規則:

*/1 * * * * /home/jelly/MySource/Shell/backupDemo.sh >> /home/jelly/log.log
編輯完成,保存完成以後,就會顯示以下提示信息:

crontab: installing new crontab
這就說明正在安裝新的定時任務,如果沒有這條提示信息,請重新運行crontab -e命令。

接下來就會看到在/home/jelly目錄下會生成一個log.log文件,並寫入了輸入的信息。

沒有問題,搞定了。

Copyright © Linux教程網 All Rights Reserved