linux定時任務,讓系統成為你的貼身幫手

cron的軟件包cronie

rpm -ql cronie

linux定時任務,讓系統成為你的貼身幫手

rpm –ql crontabs

linux定時任務,讓系統成為你的貼身幫手

最關鍵的是一個叫做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

linux定時任務,讓系統成為你的貼身幫手

說明:

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;

我的腳本內容為:

[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 #關閉 bash alias 擴展

echo `date +'%Y-%m-%d %H:%M:%S'`

[root@node2 ~]#

定時任務計劃為:

10 3,5 * * 3 bash /var/tmp/print_dtime.sh


分享到:


相關文章: