日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linuxcrontab命令:循環(huán)執(zhí)行定時任務(詳解版)
前面學習了 at 命令,此命令在指定的時間僅能執(zhí)行一次任務,但在實際工作中,系統(tǒng)的定時任務一般是需要重復執(zhí)行的。而 at 命令顯然無法滿足需求,這是就需要使用
 
crontab 命令來執(zhí)行循環(huán)定時任務。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,敦煌企業(yè)網(wǎng)站建設,敦煌品牌網(wǎng)站建設,網(wǎng)站定制,敦煌網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,敦煌網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

在介紹 crontab 命令之前,我們首先要介紹一下 crond,因為 crontab 命令需要 crond 服務支持。crond 是 linux 下用來周期地執(zhí)行某種任務或等待處理某些事件的一個守護進程,和 Windows 中的計劃任務有些類似。

crond 服務的啟動和自啟動方法如下:

[root@localhost ~]# service crond restart
停止 crond: [確定]
正在啟動 crond: [確定]
#重新啟動crond服務
[root@localhost ~]# chkconfig crond on
#設定crond服務為開機自啟動

其實,在安裝完成操作系統(tǒng)后,默認會安裝 crond 服務工具,且 crond 服務默認就是自啟動的。crond 進程每分鐘會定期檢查是否有要執(zhí)行的任務,如果有,則會自動執(zhí)行該任務。

接下來,在介紹 crontab 命令。該命令和 at 命令類似,也是通過 /etc/cron.allow 和 /etc/cron.deny 文件來限制某些用戶是否可以使用 crontab 命令的。而且原則也非常相似:

  • 當系統(tǒng)中有 /etc/cron.allow 文件時,只有寫入此文件的用戶可以使用 crontab 命令,沒有寫入的用戶不能使用 crontab 命令。同樣,如果有此文件,/etc/cron.deny 文件會被忽略,因為 /etc/cron.allow 文件的優(yōu)先級更高。
  • 當系統(tǒng)中只有 /etc/cron.deny 文件時,寫入此文件的用戶不能使用 crontab 命令,沒有寫入文件的用戶可以使用 crontab 命令。
  • 這個規(guī)則基本和 at 命令的規(guī)則一致,同樣是 /etc/cron.allow 文件比 /etc/cron.deny 文件的優(yōu)先級高,Linux 系統(tǒng)中默認只有 /etc/cron.deny 文件。

每個用戶都可以實現(xiàn)自己的 crontab 定時任務,只需使用這個用戶身份執(zhí)行“crontab -e”命令即可。當然,這個用戶不能寫入 /etc/cron.deny 文件。

crontab 命令的基本格式如下:

[root@localhost ~]# crontab [選項] [file]

注意,這里的 file 指的是命令文件的名字,表示將 file 作為 crontab 的任務列表文件并載入 crontab,若在命令行中未指定文件名,則此命令將接受標準輸入(鍵盤)上鍵入的命令,并將它們鍵入 crontab。

與此同時,表 1 羅列出了此命令常用的選項及功能。

表 1 crontab 命令常用選項及功能
選項 功能
-u user 用來設定某個用戶的 crontab 服務,例如 "-u demo" 表示設備 demo
用戶的 crontab 服務,此選項一般有 root 用戶來運行。
-e 編輯某個用戶的 crontab 文件內(nèi)容。如果不指定用戶,則表示編輯當前用戶的 crontab 文件。
-l 顯示某用戶的 crontab 文件內(nèi)容,如果不指定用戶,則表示顯示當前用戶的 crontab 文件內(nèi)容。
-r  從 /var/spool/cron 刪除某用戶的 crontab 文件,如果不指定用戶,則默認刪除當前用戶的 crontab 文件。 
-i 在刪除用戶的 crontab 文件時,給確認提示。

其實 crontab 定時任務非常簡單,只需執(zhí)行“crontab -e”命令,然后輸入想要定時執(zhí)行的任務即可。不過,當我們執(zhí)行“crontab -e”命令時,打開的是一個空文件,而且操作方法和 Vim 是一致的。那么,這個文件的格式才是我們真正需要學習的內(nèi)容。文件格式如下:

[root@localhost !]# crontab -e
#進入 crontab 編輯界面。會打開Vim編輯你的任務
* * * * * 執(zhí)行的任務

這個文件中是通過 5 個“*”來確定命令或任務的執(zhí)行時間的,這 5 個“*”的具體含義如表 2 所示。

表 2 crontab 時間表示
項目 含義 范圍
第一個"*" 一小時當中的第幾分鐘(minute) 0~59
第二個"*" 一天當中的第幾小時(hour) 0~23
第三個"*" 一個月當中的第幾天(day) 1~31
第四個"*" 一年當中的第幾個月(month) 1~12
第五個"*" 一周當中的星期幾(week) 0~7(0和7都代表星期日)

在時間表示中,還有一些特殊符號需要學習,如表 3 所示。

表 3 時間特殊符號
特殊符號 含義
*(星號) 代表任何時間。比如第一個"*"就代表一小時種每分鐘都執(zhí)行一次的意思。
,(逗號) 代表不連續(xù)的時間。比如"0 8,12,16***命令"就代表在每天的 8 點 0 分、12 點 0 分、16 點 0 分都執(zhí)行一次命令。
-(中杠) 代表連續(xù)的時間范圍。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 點 0 分執(zhí)行命令。
/(正斜線) 代表每隔多久執(zhí)行一次。比如"*/10****命令",代表每隔 10 分鐘就執(zhí)行一次命令。

當“crontab -e”編輯完成之后,一旦保存退出,那么這個定時任務實際就會寫入 /var/spool/cron/ 目錄中,每個用戶的定時任務用自己的用戶名進行區(qū)分。而且 crontab 命令只要保存就會生效,只要 crond 服務是啟動的。知道了這 5 個時間字段的含義,我們多舉幾個時間的例子來熟悉一下時間字段,如表 4 所示。

表 4 crontab舉例
時間 含義
45 22 ***命令 在 22 點 45 分執(zhí)行命令
0 17 ** 1命令 在每周一的 17 點 0 分執(zhí)行命令
0 5 1,15**命令 在每月 1 日和 15 日的凌晨 5 點 0 分執(zhí)行命令
40 4 ** 1-5命令 在每周一到周五的凌晨 4 點 40 分執(zhí)行命令
*/10 4 ***命令 在每天的凌晨 4 點,每隔 10 分鐘執(zhí)行一次命令
0 0 1,15 * 1命令 在每月 1 日和 15 日,每周一個 0 點 0 分都會執(zhí)行命令,注意:星期幾和幾日最好不要同時出現(xiàn),因為它們定義的都是天,非常容易讓管理員混淆

現(xiàn)在我們已經(jīng)對這 5 個時間字段非常熟悉了,可是在“執(zhí)行的任務”字段中都可以寫什么呢?既可以定時執(zhí)行系統(tǒng)命令,也可以定時執(zhí)行某個 Shell 腳本,這里舉幾個實際的例子。

【例 1】讓系統(tǒng)每隔 5 分鐘就向 /tmp/test 文件中寫入一行“11”,驗證一下系統(tǒng)定時任務是否會執(zhí)行。

[root@localhost ~]# crontab -e
#進入編輯界面
*/5 * * * * /bin/echo "11" >> /tmp/test

這個任務在時間工作中沒有任何意義,但是可以很簡單地驗證我們的定時任務是否可以正常執(zhí)行。如果覺得每隔 5 分鐘太長,那就換成“*”,讓它每分鐘執(zhí)行一次。而且和 at 命令一樣,如果我們定時執(zhí)行的是系統(tǒng)命令,那么最好使用絕對路徑。

【例 2】讓系統(tǒng)在每周二的凌晨 5 點 05 分重啟一次。

[root@localhost ~]# crontab -e
5.5 * * 2 /sbin/shutdown -r now

如果服務器的負載壓力比較大,則建議每周重啟一次,讓系統(tǒng)狀態(tài)歸零。比如絕大多數(shù)游戲服務器每周維護一次,維護時最主要的工作就是重啟,讓系統(tǒng)狀態(tài)歸零。這時可以讓我們的服務器自動來定時執(zhí)行。

【例 3】在每月 1 日、10 日、15 日的凌晨 3 點 30 分都定時執(zhí)行日志備份腳本 autobak.sh。

[root@localhost ~]# crontab -e
30.3 1,10,15 * * /root/sh/autobak.sh

這些定時任務保存之后,就可以在指定的時間執(zhí)行了。我們可以使用命令來查看和刪除定時任務,命令如下:

[root@localhost ~]# crontab -l
#查看root用戶的crontab任務
*/5 * * * * /bin/echo "11" >> /tmp/test
5.5 * * 2 /sbin/shutdown -r now
30.3 1,10,15 * * /root/sh/autobak.sh
[root@localhost ~]# crontab -r
#刪除root用戶所有的定時任務。如果只想刪除某個定時任務,則可以執(zhí)行“crontab -e”命令進入
#編輯模式手工刪除
[root@localhost ~]# crontab -l
no crontab for root
#刪除后,再查詢就沒有root用戶的定時任務了

在書寫 crontab 定時任務時,需要注意以下幾個事項:

  • 6 個選項都不能為空,必須填寫。如果不確定,則使用“*”代表任意時間。
  • crontab 定時任務的最小有效時間是分鐘,最大有效時間是月。像 2018 年某時執(zhí)行、3 點 30 分 30 秒這樣的時間都不能被識別。
  • 在定義時間時,日期和星期最好不要在一條定時任務中出現(xiàn),因為它們都以天為單位,非常容易讓管理員混淆。
  • 在定時任務中,不管是直接寫命令,還是在腳本中寫命令,最好都使用絕對路徑。有時使用相對路徑的命令會報錯。

系統(tǒng)的crontab設置

“crontab -e”是每個用戶都可以執(zhí)行的命令,也就是說,不同的用戶身份可以執(zhí)行自己的定時任務。但是有些定時任務需要系統(tǒng)執(zhí)行,這時就需要編輯 /etc/crontab 這個配置文件了。

當然,并不是說寫入 /etc/crontab 配置文件中的定時任務在執(zhí)行時不需要用戶身份,而是“crontab -e”命令在定義定時任務時,默認用戶身份是當前登錄用戶。而在修改 /etc/crontab 配置文件時,定時任務的執(zhí)行者身份是可以手工指定的。這樣定時任務的執(zhí)行會更加靈活,修改起來也更加方便。

那我們打開這個文件看看吧,如下:

[root@localhost ~]# vi /etc/crontab
SHELL=/bin/bash
#標識使用哪種Shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#指定PATH環(huán)境變量。crontab使用自己的PATH,而不使用系統(tǒng)默認的PATH,所以在定時任務中出現(xiàn)的
#命令最好使用大寫
MAILTO=root
#如果有報錯輸出,或命令結(jié)果有輸出,則會向root發(fā)送信息
HOME=/
#標識主目錄
# For details see man 4 crontabs
#提示大家可以去“man 4 crontabs”查看幫助
# Example of job definition:
#.——————————— minute (0 - 59)
# |.———————— hour (0 - 23)
# | |.——————— day of month (1 - 31)
# | | |.———— month (1 - 12) OR jan,feb,mar,apr……
# | | | | .———day of week(0-6)(Sunday=0 or 7)OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#分 時日月周執(zhí)行者身份命令
#列出文件格式,并加入了注釋

在 CentOS 6.x 中,/etc/crontab 文件也發(fā)生了變化。在 CentOS 5.x 中,這個文件的內(nèi)容大概是這樣子的:

#以下輸出在CentOS 5.5中
[root@sc ~]# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02.4 * * * root run-parts /etc/cron.daily
22.4 * * 0 root run-parts /etc/cron.weekly
42.4 1 * * root run-parts /etc/cron.monthly

在 CentOS 5.x 中,/etc/crontab 文件會使用 run-parts 腳本執(zhí)行 /etc/cron.{daily,weekly,monthly} 目錄中的所有文件。這個 run-parts 其實是一個 Shell 腳本,保存在 /usr/bin/run-parts 中,它的作用就是把其后面跟隨的目錄中的所有可執(zhí)行文件依次執(zhí)行。也就是說,如果我們想讓某個腳本在每天都執(zhí)行一次,那么可以不用手工去寫定時任務,而只需要給這個腳本賦予執(zhí)行權(quán)限,并把它放入 /etc/cron.daily/ 目錄中,這樣這個腳本就會在每天的凌晨 4 點 02 分執(zhí)行了。

但是在 CentOS 6.x 中,/etc/crontab 文件中不再有相關(guān)的段落,那么 run-ptars 這種定時任務的執(zhí)行方法是否不可用了呢?

我們看到 /etc/crontab 中有一句提示,讓我們“man 4 crontabs”來查看幫助,那么我們就看看這個幫助吧!在這個幫助中,寫明了“在舊版本的 crontab 配置文件中,通過 run-parts 腳本來調(diào)用 cron.{daily,weekly,monthly} 目錄,定時執(zhí)行這些目錄中的腳本。在當前系統(tǒng)中,為了避免 cron 和 anacron 之間產(chǎn)生沖突,只要 anacron 已經(jīng)安裝,就使用 anacron 來執(zhí)行這些目錄中的腳本。具體可以查看 anacron(8) 的幫助”。對于 anacron 的用法,后續(xù)章節(jié)再詳解介紹。

其實,對用戶來講,并不需要知道這個定時任務到底是由哪個程序調(diào)用的。我們需要知道的事情是如何使用系統(tǒng)的 crontab 設置。對此,新、老版本的 CentOS 沒有區(qū)別,配置方法都有兩種。

第一種方法就是把需要定時執(zhí)行的工作寫成腳本程序,并賦予執(zhí)行權(quán)限,然后直接把這個腳本復制到 /etc/cron.{daily,weekly,monthly} 目錄中的任意一個。比如,我需要讓某個腳本每周執(zhí)行,就把這個腳本復制到 /etc/cron.weekly/ 目錄中。這樣這個腳本就會每周執(zhí)行一次,具體的執(zhí)行時間要參考 anacron 的配置文件。

第二種方法就是修改 /etc/crontab 這個配置文件,加入自己的定時任務,不過需要注意指定腳本的執(zhí)行者身份。例如:

[root@localhost ~]# vi /etc/crontab
…省略部分輸出…
* * * * * root run-parts /root/cron/
#讓系統(tǒng)每分鐘都執(zhí)行一次/root/cron/目錄中的腳本,腳本執(zhí)行者是root用戶
#雖然在CentOS 6.x中不直接通過此配置文件調(diào)用/etc/cron.{daily,weekly,monthly}這些目錄,但是run-parts腳本還是可以使用的。所以我完全可以參照CentOS 5.x的方法來寫定時任務
#使用run-parts腳本調(diào)用并執(zhí)行/root/cron/目錄中所有的可執(zhí)行文件
[root@localhost ~]# mkdir cron
#建立/root/cron/目錄
[root@localhost cron]# vi /root/cron/hello.sh
#/bin/bash
echo "hello" >> /root/cron/hello.log
#在/root/cron/hello.log文件中寫入“hello”
[root@localhost cron]# chmod 755 hello.sh
#賦予執(zhí)行權(quán)限
#因為hello.sh腳本放入了/root/cron/目錄中,所以每分鐘執(zhí)行一次。

只要保存 /etc/crontab 文件,這個定時任務就可以執(zhí)行了。當然要確定 crond 服務是運行的。

這兩種方法都是可以使用的,具體看個人的習慣。不過,要想修改 /etc/crontab 文件,必須是 root 用戶,普通用戶不能修改,只能使用用戶身份的 crontab 命令。


網(wǎng)站標題:Linuxcrontab命令:循環(huán)執(zhí)行定時任務(詳解版)
轉(zhuǎn)載來源:http://www.5511xx.com/article/dhocegh.html