cron的軟件包c(diǎn)ronie
rpm -ql cronie
rpm –ql crontabs
最關(guān)鍵的是一個(gè)叫做crontab的命令,我們要書(shū)寫(xiě)的非系統(tǒng)定時(shí)任務(wù)就是通過(guò)此程序來(lái)編寫(xiě)的;
要保證crond.service服務(wù)有啟動(dòng),cron定時(shí)任務(wù)才會(huì)生效:
systemctl status crond.service 查看crond服務(wù)狀態(tài);
systemctl enable crond.service 開(kāi)機(jī)自動(dòng)啟動(dòng)crond服務(wù);
systemctl disable crond.service 開(kāi)機(jī)禁止啟動(dòng)crond服務(wù);
systemctl start crond.service 啟動(dòng)crond服務(wù);
systemctl stop crond.service 停止crond服務(wù);
systemctl restart crond.service 重啟crond服務(wù);
crontabs軟件包提供了系統(tǒng)級(jí)別的定時(shí)任務(wù)的配置文件和一些初始狀態(tài)的腳本,正常情況,我們不應(yīng)該
去動(dòng)這些腳本。特別是系統(tǒng)默認(rèn)自帶的東西,不要去修改他們,如果一定要用系統(tǒng)的定時(shí)任務(wù),無(wú)非
是我們自己去按照規(guī)定去添加。
提交cron定時(shí)任務(wù)說(shuō)明
向crond提交作業(yè)的方式不同于at,它需要使用專(zhuān)用的配置文件,此文件有固定格式,
不建議使用文本編輯器直接編輯此文件;要使用crontab命令;
cron任務(wù)分為兩類(lèi):
1、系統(tǒng)cron任務(wù)
主要用來(lái)實(shí)現(xiàn)系統(tǒng)自身的維護(hù);可以手動(dòng)編輯修改/etc/crontab文件
2、用戶(hù)cron任務(wù)
通過(guò)crontab命令(一個(gè)帶有SUID權(quán)限的工具)增刪改查;
系統(tǒng)定時(shí)任務(wù)配置文件
查看配置文件/etc/crontab
說(shuō)明:
1. 如果定義的cron任務(wù)有多個(gè),每行寫(xiě)一個(gè),共7個(gè)字段;字段分別為,
分 時(shí) 日 月 周 user-name表示用戶(hù)名, 后邊表示要執(zhí)行的命令或腳本;
2. 由于這里的環(huán)境變量PATH定義的可選值與系統(tǒng)bash接口略有差別,這里范圍更小,
所以建議,定義定時(shí)任務(wù)中用到的命令建議使用絕對(duì)路徑,或者自定義PATH環(huán)境變量;
crontab命令選項(xiàng)和說(shuō)明
crontab的常建語(yǔ)法結(jié)構(gòu)和選項(xiàng):
crontab [-u user] [-l | -r | -e] [-i]
-e:編輯當(dāng)前用戶(hù)的或者指定用戶(hù)的crontab,如果沒(méi)有定時(shí)任務(wù),會(huì)作為一個(gè)新的文件編輯,編輯默認(rèn)是以vi編輯
器來(lái)編輯,可以通過(guò)顯式設(shè)定VISUAL或EDITOR環(huán)境變量來(lái)修改使用指定的編輯器來(lái)編輯。一但編輯的crontab保
存退出后,crontab會(huì)自動(dòng)被安裝成定時(shí)任務(wù)計(jì)劃。
比如:
export EDITOR="/usr/bin/nano" 或 export EDITOR="/usr/bin/emasc",然后再去crontab -e
nano和emacs都是文本編輯器,默認(rèn)都是沒(méi)有安裝的,需要自己手動(dòng)指定安裝。
-l:列出當(dāng)前用戶(hù)或者指定用戶(hù)的crontab到標(biāo)準(zhǔn)輸出。
-r:移除當(dāng)前用戶(hù)或者指定用戶(hù)的所有定時(shí)任務(wù),即刪除/var/spool/cron/USERNAME文件;(危險(xiǎn),沒(méi)有交互式
操作提示)
-i:在使用-r選項(xiàng)移除所有任務(wù)時(shí)提示用戶(hù)確認(rèn)信息;
-u user:指定管理給定用戶(hù)的crontab,只有超級(jí)管理員用戶(hù)才能管理,普通用戶(hù)不能使用此選項(xiàng);
小技巧和注意事項(xiàng):
1、如果不想把定時(shí)任務(wù)運(yùn)行結(jié)果通知給指定用戶(hù)
COMMAND > /dev/null 標(biāo)準(zhǔn)錯(cuò)誤信息還是會(huì)以郵件的形式通知給用戶(hù);
COMMAND &> /dev/null 所有輸出信息都不會(huì)以郵件的形式通知用戶(hù);
2.定義COMMAND時(shí),如果命令需要用到%,需要對(duì)其轉(zhuǎn)義;但放置于單引號(hào)中的%不用轉(zhuǎn)義亦可;
3.某任務(wù)在指定的時(shí)間因關(guān)機(jī)未能執(zhí)行,下次開(kāi)機(jī)不會(huì)自動(dòng)執(zhí)行;
4.如果期望某時(shí)間因故未能按時(shí)執(zhí)行,下次開(kāi)機(jī)后無(wú)論是否到了相應(yīng)時(shí)間點(diǎn)都要執(zhí)行一次,可使用anacron實(shí)現(xiàn);
crontab配置定時(shí)任務(wù)時(shí)候的時(shí)間表示
時(shí)間格式一共5位,分別對(duì)應(yīng):
* * * * *
分 時(shí) 日 月 周
分鐘有效值:0 - 59;
時(shí)的有效值:0 - 23;
日的有效值: 1 - 31;
月的有效值:1 - 12 或 jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec;
周的有效值:0 - 6 ,星期天可以用0或7表示,這個(gè)是個(gè)特例,也可以用周的英文縮寫(xiě),
sun,mon,tue,wed,thu,fri,sat
· 指定特定值
給定時(shí)間點(diǎn)有效取值范圍內(nèi)的值;
注意:day of week和day of month一般不同時(shí)使用;
例如:
3 * * * *:執(zhí)行頻率為 每小時(shí)執(zhí)行一次;每小時(shí)的第3分鐘執(zhí)行;
3 4 * * 5:執(zhí)行頻率為 每周執(zhí)行一次;每周5的4點(diǎn)3分執(zhí)行;
5 6 7 * *:執(zhí)行頻率為 每月執(zhí)行一次;每月的7號(hào)的6點(diǎn)5分執(zhí)行;
7 8 9 10 *:執(zhí)行頻率為 每年執(zhí)行一次;每年的10月9號(hào)8點(diǎn)7分執(zhí)行;
· 取所有值
給定時(shí)間點(diǎn)上有效取值范圍內(nèi)的所有值;表示"每xxx"的含義;
· 離散取值
在時(shí)間點(diǎn)上使用逗號(hào)分隔的多個(gè)值;
x,y,z
例如:
0 8,20 * * 3,7:這種不建議;(出現(xiàn)了20號(hào),又出現(xiàn)了每周3,周天);
9 8 * * 3,7:每周三和周日?qǐng)?zhí)行的8點(diǎn)9分執(zhí)行;
· 連續(xù)取值
在時(shí)間點(diǎn)上使用符號(hào)短破折號(hào)"-"連接開(kāi)頭和結(jié)束
x-y
例如:
0 9-18 * * 1-5:周1到周5,每天的9點(diǎn)到18點(diǎn),執(zhí)行;(假設(shè)上午9點(diǎn)上班,下午18點(diǎn)下班,雙休,這就是
工作日?qǐng)?zhí)行要執(zhí)行的任務(wù))
· 步長(zhǎng)取值
在指定時(shí)間點(diǎn)上,定義步長(zhǎng):
/number :其中number表示步長(zhǎng);
指定的時(shí)間點(diǎn)不能被步長(zhǎng)整除時(shí),其意義將不復(fù)存在;
最小時(shí)間單位為"分鐘",想要完成"秒"級(jí)別任務(wù),需要額外借助于其他機(jī)制,例如
可以定義每分鐘定時(shí)計(jì)劃任務(wù),再利用腳本實(shí)現(xiàn)在每分鐘之內(nèi),循環(huán)執(zhí)行多次;
例如:
*/5 * * * *:每5分鐘執(zhí)行一次;
* */1 * * *:每1小時(shí)執(zhí)行一次;
* * */5 * *:每5天執(zhí)行一次;
*/7 * * * *:這個(gè)并不完全是每7分鐘執(zhí)行一次,這種不整除的現(xiàn)象,不建議使用。
cron定時(shí)任務(wù)示例
1、每12小時(shí)備份一次/etc目錄至/backups目錄中,保存文件 名稱(chēng)格式為"etc-yyyy-mm-dd-hh.tar.xz"要添加的任務(wù)計(jì)劃為:
* */12 * * * /usr/bin/mkdir -p /backups >/dev/null && /usr/bin/tar -JPcvf /backups/etc-`date '+%Y-%m-%d-%H'`.tar.xz /etc >/dev/null
*
2、每周2、4、7備份/var/log/secure文件至/logs目錄中,文件名格式為"secure-yyyymmdd";
要添加的任務(wù)計(jì)劃為:
* * * * 2,4,7 /usr/bin/mkdir -p /logs >/dev/null && tar -JcvfP /logs/secure-`date +%Y%m%d`.tar.xz /var/log/secure >/dev/null
3、每?jī)尚r(shí)取出當(dāng)前系統(tǒng)/proc/meminfo文件中以S或M開(kāi)頭的行信息追加至/tmp/meminfo.txt文件中;
* */2 * * * /usr/bin/grep -E '^(S|M)' /proc/meminfo >> /tmp/meminfo.txt
4、制定每周三凌晨三、五點(diǎn)10分執(zhí)行某個(gè)腳本,輸出當(dāng)前時(shí)間,時(shí)間格式為 2017-12-28 10:00:00;
我的腳本內(nèi)容為:
[root@node2 ~]# cat /var/tmp/print_dtime.sh
#! /bin/bash
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LANG="en_US.UTF-8"
export PATH LANG
source /etc/profile
shopt -u expand_aliases #關(guān)閉 bash alias 擴(kuò)展
echo `date +'%Y-%m-%d %H:%M:%S'`
[root@node2 ~]#
定時(shí)任務(wù)計(jì)劃為:
10 3,5 * * 3 bash /var/tmp/print_dtime.sh
-
Linux
+關(guān)注
關(guān)注
87文章
11512瀏覽量
213912 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3300瀏覽量
119039 -
編輯器
+關(guān)注
關(guān)注
1文章
822瀏覽量
32061
發(fā)布評(píng)論請(qǐng)先 登錄
Linux系統(tǒng)定時(shí)任務(wù)Crond
詳解linux定時(shí)任務(wù)
嵌入式linux是如何去實(shí)現(xiàn)定時(shí)任務(wù)的
定時(shí)任務(wù)的發(fā)展史是怎么樣的

linux定時(shí)任務(wù)如何判斷文件差異?
SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)

Python定時(shí)任務(wù)的實(shí)現(xiàn)方式
嵌入式linux 用倒計(jì)時(shí)的方式代替定時(shí)任務(wù)

解析Golang定時(shí)任務(wù)庫(kù)gron設(shè)計(jì)和原理
求一種SpringBoot定時(shí)任務(wù)動(dòng)態(tài)管理通用解決方案
如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?
Linux如何使用cron進(jìn)行定時(shí)任務(wù)的操作
python定時(shí)任務(wù)實(shí)踐

linux定時(shí)任務(wù)的用法總結(jié)

評(píng)論