cron的軟體包cronie
rpm -ql cronie
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yY4YTOiVTYkJTY5QmZzgDNkhjN1E2N3YjN4kDNmRjZ48CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
rpm –ql crontabs
最關鍵的是一個叫做crontab的指令,我們要書寫的非系統定時任務就是通過此程式來編寫的;
要保證crond.service服務有啟動,cron定時任務才會生效:
systemctl status crond.service 檢視crond服務狀态;
systemctl enable crond.service 開機自動啟動crond服務;
systemctl disable crond.service 開機禁止啟動crond服務;
systemctl start crond.service 啟動crond服務;
systemctl stop crond.service 停止crond服務;
systemctl restart crond.service 重新開機crond服務;
crontabs軟體包提供了系統級别的定時任務的配置檔案和一些初始狀态的腳本,正常情況,我們不應該
去動這些腳本。特别是系統預設自帶的東西,不要去修改他們,如果一定要用系統的定時任務,無非
是我們自己去按照規定去添加。
送出cron定時任務說明
向crond送出作業的方式不同于at,它需要使用專用的配置檔案,此檔案有固定格式,
不建議使用文本編輯器直接編輯此檔案;要使用crontab指令;
cron任務分為兩類:
1、系統cron任務
主要用來實作系統自身的維護;可以手動編輯修改/etc/crontab檔案
2、使用者cron任務
通過crontab指令(一個帶有SUID權限的工具)增删改查;
系統定時任務配置檔案
檢視配置檔案/etc/crontab
說明:
1. 如果定義的cron任務有多個,每行寫一個,共7個字段;字段分别為,
分 時 日 月 周 user-name表示使用者名, 後邊表示要執行的指令或腳本;
2. 由于這裡的環境變量PATH定義的可選值與系統bash接口略有差别,這裡範圍更小,
是以建議,定義定時任務中用到的指令建議使用絕對路徑,或者自定義PATH環境變量;
crontab指令選項和說明
crontab的常建文法結構和選項:
crontab [-u user] [-l | -r | -e] [-i]
-e:編輯目前使用者的或者指定使用者的crontab,如果沒有定時任務,會作為一個新的檔案編輯,編輯預設是以vi編輯
器來編輯,可以通過顯式設定VISUAL或EDITOR環境變量來修改使用指定的編輯器來編輯。一但編輯的crontab保
存退出後,crontab會自動被安裝成定時任務計劃。
比如:
export EDITOR="/usr/bin/nano" 或 export EDITOR="/usr/bin/emasc",然後再去crontab -e
nano和emacs都是文本編輯器,預設都是沒有安裝的,需要自己手動指定安裝。
-l:列出目前使用者或者指定使用者的crontab到标準輸出。
-r:移除目前使用者或者指定使用者的所有定時任務,即删除/var/spool/cron/USERNAME檔案;(危險,沒有互動式
操作提示)
-i:在使用-r選項移除所有任務時提示使用者确認資訊;
-u user:指定管理給定使用者的crontab,隻有超級管理者使用者才能管理,普通使用者不能使用此選項;
小技巧和注意事項:
1、如果不想把定時任務運作結果通知給指定使用者
COMMAND > /dev/null 标準錯誤資訊還是會以郵件的形式通知給使用者;
COMMAND &> /dev/null 所有輸出資訊都不會以郵件的形式通知使用者;
2.定義COMMAND時,如果指令需要用到%,需要對其轉義;但放置于單引号中的%不用轉義亦可;
3.某任務在指定的時間因關機未能執行,下次開機不會自動執行;
4.如果期望某時間因故未能按時執行,下次開機後無論是否到了相應時間點都要執行一次,可使用anacron實作;
crontab配置定時任務時候的時間表示
時間格式一共5位,分别對應:
* * * * *
分 時 日 月 周
分鐘有效值:0 - 59;
時的有效值:0 - 23;
日的有效值: 1 - 31;
月的有效值:1 - 12 或 jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec;
周的有效值:0 - 6 ,星期天可以用0或7表示,這個是個特例,也可以用周的英文縮寫,
sun,mon,tue,wed,thu,fri,sat
· 指定特定值
給定時間點有效取值範圍内的值;
注意:day of week和day of month一般不同時使用;
例如:
3 * * * *:執行頻率為 每小時執行一次;每小時的第3分鐘執行;
3 4 * * 5:執行頻率為 每周執行一次;每周5的4點3分執行;
5 6 7 * *:執行頻率為 每月執行一次;每月的7号的6點5分執行;
7 8 9 10 *:執行頻率為 每年執行一次;每年的10月9号8點7分執行;
· 取所有值
給定時間點上有效取值範圍内的所有值;表示"每xxx"的含義;
· 離散取值
在時間點上使用逗号分隔的多個值;
x,y,z
例如:
0 8,20 * * 3,7:這種不建議;(出現了20号,又出現了每周3,周天);
9 8 * * 3,7:每周三和周日執行的8點9分執行;
· 連續取值
在時間點上使用符号短破折号"-"連接配接開頭和結束
x-y
例如:
0 9-18 * * 1-5:周1到周5,每天的9點到18點,執行;(假設上午9點上班,下午18點下班,雙休,這就是
工作日執行要執行的任務)
· 步長取值
在指定時間點上,定義步長:
/number :其中number表示步長;
指定的時間點不能被步長整除時,其意義将不複存在;
最小時間機關為"分鐘",想要完成"秒"級别任務,需要額外借助于其他機制,例如
可以定義每分鐘定時計劃任務,再利用腳本實作在每分鐘之内,循環執行多次;
例如:
*/5 * * * *:每5分鐘執行一次;
* */1 * * *:每1小時執行一次;
* * */5 * *:每5天執行一次;
*/7 * * * *:這個并不完全是每7分鐘執行一次,這種不整除的現象,不建議使用。
cron定時任務示例
1、每12小時備份一次/etc目錄至/backups目錄中,儲存檔案 名稱格式為"etc-yyyy-mm-dd-hh.tar.xz"要添加的任務計劃為:
* */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";
要添加的任務計劃為:
* * * * 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、每兩小時取出目前系統/proc/meminfo檔案中以S或M開頭的行資訊追加至/tmp/meminfo.txt檔案中;
* */2 * * * /usr/bin/grep -E '^(S|M)' /proc/meminfo >> /tmp/meminfo.txt
4、制定每周三淩晨三、五點10分執行某個腳本,輸出目前時間,時間格式為 2017-12-28 10:00:00;
我的腳本内容為:
[[email protected] ~]# cat /var/tmp/print_dtime.sh
#! /bin/bash
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH LANG
source /etc/profile
shopt -u expand_aliases #關閉 bash alias 擴充
echo `date +'%Y-%m-%d %H:%M:%S'`
[[email protected] ~]#
定時任務計劃為:
10 3,5 * * 3 bash /var/tmp/print_dtime.sh