cron 工具 每分钟_计划任务 cron和crontab
很多時(shí)候,我們需要定時(shí)執(zhí)行某個(gè)應(yīng)用或者某段腳本,在linux上,可以使用cron服務(wù),它有點(diǎn)類似于Windows上的任務(wù)計(jì)劃程序。這篇文章將簡(jiǎn)單介紹cron的使用。
1. crond和crontab
首先需要分清楚兩個(gè)概念:crond和crontab。crond是后臺(tái)守護(hù)進(jìn)程的名稱(d代表daemon),用來實(shí)際執(zhí)行腳本,它在系統(tǒng)中是一直運(yùn)行的。可以通過下面的方式查看到它:
# systemctl | grep crond
crond.service loaded active running Command Schedulercrontab是一個(gè)工具,用來列出cron中當(dāng)前運(yùn)行的作業(yè)(應(yīng)用或腳本等)、向cron中添加作業(yè)、編輯作業(yè)、刪除作業(yè)。它并不是一直在后臺(tái)運(yùn)行的,是一個(gè)短時(shí)的命令行工具,執(zhí)行完就結(jié)束了。可以簡(jiǎn)單理解crond和crontab組合起來提供cron服務(wù)。
2. crontab的常用命令
因?yàn)閏rond是一個(gè)守護(hù)進(jìn)程,所以在系統(tǒng)開機(jī)后,通過systemctl start crond啟動(dòng)一次以后(默認(rèn)自動(dòng)啟動(dòng)的),幾乎就不需要再管它了,之后的操作都通過crontab來完成。
2.1 查看現(xiàn)有任務(wù)
# crontab -l
no crontab for root因?yàn)楝F(xiàn)在沒有任務(wù),所以顯示的是 no crontab for root,可見,任務(wù)是根據(jù)用戶進(jìn)行區(qū)分的。
2.2 添加定時(shí)任務(wù)
為了便于測(cè)試,我們可以創(chuàng)建這樣一個(gè)簡(jiǎn)單的腳本(位于~/tmp/job1.sh):在一個(gè)文件末尾追加當(dāng)前時(shí)間。腳本如下:
date +'%F %T' >> ~/tmp/job1.log創(chuàng)建完成后記得賦予一下執(zhí)行權(quán)限:
# chmod 755 job1.sh接下來,需要配置多久運(yùn)行一次。這里通過cron表達(dá)式來設(shè)置,它非常靈活,可以很簡(jiǎn)單也可以很復(fù)雜。cron表達(dá)式的應(yīng)用廣泛,不止用在系統(tǒng)層面,在其他各種編程語言的類庫(kù)當(dāng)中,都有類似的實(shí)現(xiàn),語法略有不同。使用下面的命令可以查看linux系統(tǒng)中cron表達(dá)式的寫法:
# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see 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如果需要查看更詳細(xì)的用法,可以使用?# man crontab?命令查看。
整理后如下表所示:
注意:不同的cron應(yīng)用存在很大差異,比如crontab不支持“秒”,特殊字符也支持的比較少(支持,-*/)。而其他一些應(yīng)用,則支持“秒”和更多的特殊字符。這里為了更完備一些,所以全都列出來了,省的以后再去總結(jié)。
| 名稱 | 必須 | 取值范圍 | 可設(shè)置的特殊字符 |
|---|---|---|---|
| 分 | 是 | 0-59 | ,-*/ |
| 時(shí) | 是 | 0-23 | ,-*/ |
| 日(月) | 是 | 1-31 | ,-*?/LW |
| 月 | 是 | 1-12 或者 jan-dec | ,-*/ |
| 日(周) | 是 | 0-7(0和7都是星期天) 或者 sun-sat | ,-*?/L# |
| 年 | 否 | 留空,1970-2099 | ,-*/ |
幾個(gè)特殊字符的含義:
| 字符 | 含義 |
|---|---|
| * | 全部。意思是在該時(shí)間的任意點(diǎn)都應(yīng)當(dāng)執(zhí)行 |
| ? | 不指定,任意。僅用于 日(月)和日(周)。0 0 5 * ? 代表每個(gè)月的第5天零點(diǎn),不論星期幾。 0 0 ? * 1 代表每周一,不論是當(dāng)月的哪天。 |
| , | 多個(gè)值的分隔符,例如1,5,10 |
| - | 代表連續(xù)值,例如1-20 |
| / | 步長(zhǎng)。例如 5/15,代表從5開始,以15為步長(zhǎng)。因此,當(dāng)5/15位于分鐘的位置時(shí),表示小時(shí)內(nèi)的第5、20、35和50分鐘。 |
| L | 最后一天。可以是每月最后一天或者每周最后一天。如果用在 天(周)字段,并且前面加數(shù)字,則表示最后一個(gè)周N。例如5L,表示最后一個(gè)周五(5表示周五,L表示最后)。 |
| W | 工作日,指周一到周五的任意一天 |
| # | 表示第幾個(gè)的意思,例如 6#3,表示當(dāng)月第3個(gè)星期六(6表示周六,3表示第3個(gè)) |
幾個(gè)簡(jiǎn)單的例子:
| 表達(dá)式 | 含義 |
|---|---|
| * * * * * | 每分鐘執(zhí)行一次 |
| 30 * * * * | 每小時(shí)的30分執(zhí)行一次 |
| */5 * * * * | 每5分鐘執(zhí)行一次 |
| 0/5 * * * * | 每5分鐘執(zhí)行一次,且僅在0,5,15,20...55分執(zhí)行 |
| 5 0 * * * | 每天的00:05執(zhí)行一次 |
注意:crontab中 日(周)不接受“?”的寫法,在很多其他應(yīng)用中則可以,例如Quartz.Net庫(kù):https://www.quartz-scheduler.net/
提示:更多的用法,可以參考:https://crontab.guru
接下來,如果我們想要每分鐘執(zhí)行一下前面創(chuàng)建的job1.sh腳本,需要再創(chuàng)建一個(gè)crontab作業(yè)(jobs.cron,后綴名無所謂,這里只是為了便于識(shí)別),其中包含了cron表達(dá)式,用于表明job1.sh執(zhí)行的周期:
* * * * * ~/tmp/job1.sh使用crontab將它加入到計(jì)劃中:
# crontab jobs.cron再次查看當(dāng)前計(jì)劃,可以看到這樣的結(jié)果:
# crontab -l
* * * * * ~/tmp/job1.sh2.3 刪除定時(shí)任務(wù)
先將job1.sh復(fù)制一份,稍作修改,然后編輯一下jobs.cron,將job2.sh也加入進(jìn)去:
* * * * * ~/tmp/job1.sh
*/5 * * * * ~/tmp/job2.sh然后重新加入到cron服務(wù)中。
# crontab jobs.cron接著查看一下當(dāng)前cron中的作業(yè):
# crontab -l
* * * * * ~/tmp/job1.sh
*/5 * * * * ~/tmp/job2.sh可以看到上面有job1.sh和job2.sh兩個(gè)作業(yè),其效果相當(dāng)于將jobs.cron文件的內(nèi)容拷貝進(jìn)去。
如果想要?jiǎng)h除作業(yè),則執(zhí)行:
# crontab -r這樣會(huì)刪除所有作業(yè),如果只想刪除一個(gè),或者想對(duì)作業(yè)進(jìn)行編輯,可以使用下面的命令。
2.4 編輯定時(shí)任務(wù)
crontab -e?命令會(huì)調(diào)用編輯器(通常是vi或者vim),直接編輯計(jì)劃作業(yè),相當(dāng)于編輯jobs.cron。只不過編輯完立即生效,不需要再執(zhí)行crontab進(jìn)行加載。
# crontab -e
crontab: installing new crontab統(tǒng)一期間,個(gè)人不建議使用crontab -e編輯計(jì)劃,而是編輯jobs.cron,然后進(jìn)行加載。這樣的話jobs.cron文件相當(dāng)于一個(gè)備份,方便日后恢復(fù)。
3. 查看作業(yè)日志
在作業(yè)執(zhí)行出現(xiàn)異常(或作業(yè)腳本寫日志)時(shí),cron服務(wù)會(huì)輸出日志,在我的CentOS7系統(tǒng)上,查看的地址位于/var/log下。
# ls /var/log | grep cron
cron
cron-20180819
cron-20180826
cron-20180902
cron-20180909如果想讓自己編寫的作業(yè)輸出日志,可以這樣編寫jobs.cron:
* * * * * ~/tmp/job1.sh >> /var/log/job1.log 2>&1上面的意思是將stdout和stderr輸出到/var/log/job1.log。
修改job1.sh,在底部加入echo hello。然后調(diào)用crontab jobs.cron重新加載,然后在/var/log目錄下可以看到j(luò)ob1.log,其中包含了輸出的文本“hello”。
至此,我們已經(jīng)熟悉了cron相關(guān)的概念,并完成了常見的添加、刪除、編輯操作,且學(xué)會(huì)了如何查看和輸出作業(yè)日志。
轉(zhuǎn)載:http://www.tracefact.net/tech/080.html----------END----------
總結(jié)
以上是生活随笔為你收集整理的cron 工具 每分钟_计划任务 cron和crontab的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海欢乐谷天幕水极几点开始
- 下一篇: 速腾14T自动奢华版和14T蓝驱对照哪一