日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

cron 工具 每分钟_计划任务 cron和crontab

發布時間:2023/11/27 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cron 工具 每分钟_计划任务 cron和crontab 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很多時候,我們需要定時執行某個應用或者某段腳本,在linux上,可以使用cron服務,它有點類似于Windows上的任務計劃程序。這篇文章將簡單介紹cron的使用。

1. crond和crontab

首先需要分清楚兩個概念:crond和crontab。crond是后臺守護進程的名稱(d代表daemon),用來實際執行腳本,它在系統中是一直運行的。可以通過下面的方式查看到它:

# systemctl | grep crond
crond.service loaded active running Command Scheduler

crontab是一個工具,用來列出cron中當前運行的作業(應用或腳本等)、向cron中添加作業、編輯作業、刪除作業。它并不是一直在后臺運行的,是一個短時的命令行工具,執行完就結束了。可以簡單理解crond和crontab組合起來提供cron服務。

2. crontab的常用命令

因為crond是一個守護進程,所以在系統開機后,通過systemctl start crond啟動一次以后(默認自動啟動的),幾乎就不需要再管它了,之后的操作都通過crontab來完成。

2.1 查看現有任務

# crontab -l
no crontab for root

因為現在沒有任務,所以顯示的是 no crontab for root,可見,任務是根據用戶進行區分的。

2.2 添加定時任務

為了便于測試,我們可以創建這樣一個簡單的腳本(位于~/tmp/job1.sh):在一個文件末尾追加當前時間。腳本如下:

date +'%F %T' >> ~/tmp/job1.log

創建完成后記得賦予一下執行權限:

# chmod 755 job1.sh

接下來,需要配置多久運行一次。這里通過cron表達式來設置,它非常靈活,可以很簡單也可以很復雜。cron表達式的應用廣泛,不止用在系統層面,在其他各種編程語言的類庫當中,都有類似的實現,語法略有不同。使用下面的命令可以查看linux系統中cron表達式的寫法:

# 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

如果需要查看更詳細的用法,可以使用?# man crontab?命令查看。

整理后如下表所示:

注意:不同的cron應用存在很大差異,比如crontab不支持“秒”,特殊字符也支持的比較少(支持,-*/)。而其他一些應用,則支持“秒”和更多的特殊字符。這里為了更完備一些,所以全都列出來了,省的以后再去總結。
名稱必須取值范圍可設置的特殊字符
0-59,-*/
0-23,-*/
日(月)1-31,-*?/LW
1-12 或者 jan-dec,-*/
日(周)0-7(0和7都是星期天)
或者 sun-sat
,-*?/L#
留空,1970-2099,-*/

幾個特殊字符的含義:

字符含義
*全部。意思是在該時間的任意點都應當執行
?不指定,任意。僅用于 日(月)和日(周)。0 0 5 * ? 代表每個月的第5天零點,不論星期幾。
0 0 ? * 1 代表每周一,不論是當月的哪天。
,多個值的分隔符,例如1,5,10
-代表連續值,例如1-20
/步長。例如 5/15,代表從5開始,以15為步長。因此,當5/15位于分鐘的位置時,表示小時內的第5、20、35和50分鐘。
L最后一天。可以是每月最后一天或者每周最后一天。如果用在 天(周)字段,并且前面加數字,則表示最后一個周N。例如5L,表示最后一個周五(5表示周五,L表示最后)。
W工作日,指周一到周五的任意一天
#表示第幾個的意思,例如 6#3,表示當月第3個星期六(6表示周六,3表示第3個)

幾個簡單的例子:

表達式含義
* * * * *每分鐘執行一次
30 * * * *每小時的30分執行一次
*/5 * * * *每5分鐘執行一次
0/5 * * * *每5分鐘執行一次,且僅在0,5,15,20...55分執行
5 0 * * *每天的00:05執行一次
注意:crontab中 日(周)不接受“?”的寫法,在很多其他應用中則可以,例如Quartz.Net庫:https://www.quartz-scheduler.net/
提示:更多的用法,可以參考:https://crontab.guru

接下來,如果我們想要每分鐘執行一下前面創建的job1.sh腳本,需要再創建一個crontab作業(jobs.cron,后綴名無所謂,這里只是為了便于識別),其中包含了cron表達式,用于表明job1.sh執行的周期:

* * * * * ~/tmp/job1.sh

使用crontab將它加入到計劃中:

# crontab jobs.cron

再次查看當前計劃,可以看到這樣的結果:

# crontab -l
* * * * * ~/tmp/job1.sh

2.3 刪除定時任務

先將job1.sh復制一份,稍作修改,然后編輯一下jobs.cron,將job2.sh也加入進去:

* * * * * ~/tmp/job1.sh
*/5 * * * * ~/tmp/job2.sh

然后重新加入到cron服務中。

# crontab jobs.cron

接著查看一下當前cron中的作業:

# crontab -l
* * * * * ~/tmp/job1.sh
*/5 * * * * ~/tmp/job2.sh

可以看到上面有job1.sh和job2.sh兩個作業,其效果相當于將jobs.cron文件的內容拷貝進去。

如果想要刪除作業,則執行:

# crontab -r

這樣會刪除所有作業,如果只想刪除一個,或者想對作業進行編輯,可以使用下面的命令。

2.4 編輯定時任務

crontab -e?命令會調用編輯器(通常是vi或者vim),直接編輯計劃作業,相當于編輯jobs.cron。只不過編輯完立即生效,不需要再執行crontab進行加載。

# crontab -e
crontab: installing new crontab

統一期間,個人不建議使用crontab -e編輯計劃,而是編輯jobs.cron,然后進行加載。這樣的話jobs.cron文件相當于一個備份,方便日后恢復。

3. 查看作業日志

在作業執行出現異常(或作業腳本寫日志)時,cron服務會輸出日志,在我的CentOS7系統上,查看的地址位于/var/log下。

# ls /var/log | grep cron
cron
cron-20180819
cron-20180826
cron-20180902
cron-20180909

如果想讓自己編寫的作業輸出日志,可以這樣編寫jobs.cron:

* * * * * ~/tmp/job1.sh >> /var/log/job1.log 2>&1

上面的意思是將stdout和stderr輸出到/var/log/job1.log。

修改job1.sh,在底部加入echo hello。然后調用crontab jobs.cron重新加載,然后在/var/log目錄下可以看到job1.log,其中包含了輸出的文本“hello”。

至此,我們已經熟悉了cron相關的概念,并完成了常見的添加、刪除、編輯操作,且學會了如何查看和輸出作業日志。

轉載:http://www.tracefact.net/tech/080.html----------END----------

總結

以上是生活随笔為你收集整理的cron 工具 每分钟_计划任务 cron和crontab的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。