Linux任務計劃(at、batch、cron)

Linux中有兩類任務計劃,第一種是某個時間執行一次,用at來實現;另一種是周期性執行任務,用cron來實現。

  1. Linux本地電子郵件服務
  2. at系列:一次性計劃任務
    2.1 at命令
    2.2 batch命令
  3. cron:周期性任務計劃
    3.1、crond配置文件
    3.2、cron任務中的時間表示
    3.3、crontab命令

任務計劃的執行結果默認都用郵件來通知用戶,所以先來介紹一下Linux系統的郵件功能。

1、Linux本地電子郵件服務

常見的郵件協議有以下三種:

  • smtp:simple mail transmission protocol:簡單郵件傳輸協議
  • pop3: post office porotocol:郵局協議
  • imap4: internet mail access protocol, 互聯網郵件訪問協議

Linux中使用mail或mailx命令來實現本地電子郵件服務。

  • mailx - send and receive Internet mail
    最常用的是-s subject選項,指定郵件主題。

生成郵件正文的三種方式

  1. 交互式輸入:.單獨成行可以表示正文結束;Ctrl+d提交亦可;
    [root@localhost ~]# mail -s 'test mail from root' user1 #發送一封主題為test mail from root的郵件到user。
    hello user1.
    from root!
    . # .點單獨成行,郵件正文結束。
    EOT
    [root@localhost ~]# su - user1
    [user1@localhost ~]$ mail #切換到user1,用mail收郵件,可以看到一封新郵件。
    Heirloom Mail version 12.4 7/29/08. Type ? for help.
    "/var/spool/mail/user1": 1 message 1 new
    >N 1 root Sun Jun 10 11:38 19/637 "test mail from root"

  2. 通過輸入重定向,將文件內容附到正文中。
    [user1@localhost ~]$ mail -s 'file passwd' root < /etc/passwd #將/etc/passwd文件的內容附到正文發送給root。
    [user1@localhost ~]$ exit
    logout
    You have mail in /var/spool/mail/root
    [root@localhost ~]# mail #root用戶收到郵件。
    Heirloom Mail version 12.4 7/29/08. Type ? for help.
    "/var/spool/mail/root": 1 message 1 new
    >N 1 user1@localhost.loca Sun Jun 10 11:49 37/1493 "file passwd"
    & 1 #查看郵件。
    Message 1:
    From user1@localhost.localdomain Sun Jun 10 11:49:10 2018
    Return-Path: <user1@localhost.localdomain>
    X-Original-To: root
    Delivered-To: root@localhost.localdomain
    Date: Sun, 10 Jun 2018 11:49:09 +0800
    To: root@localhost.localdomain
    Subject: file passwd
    User-Agent: Heirloom mailx 12.4 7/29/08
    Content-Type: text/plain; charset=us-ascii
    From: user1@localhost.localdomain
    Status: R
    #以下為郵件正文內容。
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    以下省略

  3. 使用cat命令,通過管道,將文件內容輸出重定向到郵件正文。
    [root@localhost ~]# cat /etc/fstab | mail -s 'file fstab' user1 #將/etc/fstab文件內容附到正文發送給user1。
    [root@localhost ~]# su - user1
    [user1@localhost ~]$ mail #切換到user1,使用mail收取郵件。
    Heirloom Mail version 12.4 7/29/08. Type ? for help.
    "/var/spool/mail/user1": 2 messages 1 new
    1 root Sun Jun 10 11:38 20/648 "test mail from root"
    >N 2 root Sun Jun 10 11:53 32/1383 "file fstab"
    & 2 #查看主題名為“file fstab”的郵件
    Message 2:
    From root@localhost.localdomain Sun Jun 10 11:53:50 2018
    Return-Path: <root@localhost.localdomain>
    X-Original-To: user1
    Delivered-To: user1@localhost.localdomain
    Date: Sun, 10 Jun 2018 11:53:50 +0800
    To: user1@localhost.localdomain
    Subject: file fstab
    User-Agent: Heirloom mailx 12.4 7/29/08
    Content-Type: text/plain; charset=us-ascii
    From: root@localhost.localdomain (root)
    Status: R
    #郵件正文為/etc/fstab文件的內容。
    #
    # /etc/fstab
    # Created by anaconda on Sat Jun 2 10:39:48 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
    UUID=bc141b9a-bdda-44c7-991a-f56e9cee8f6a /boot ext4 defaults 1 2
    /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
    tmpfs /dev/shm tmpfs defaults 0 0
    以下省略

2、at系列:一次性計劃任務

在未來某一時刻一次性執行某任務。

  • at, batch, atq, atrm - queue, examine or delete jobs for later execution

at是一個命令系列,包含at、batch、atq、atrm4個命令。

2.1、at命令

at [OPTION]... TIME

OPTION
-l:查看作業隊列,相當于atq命令
-f /PATH/FROM/SOMEFILE:從指定文件中讀取作業任務,而非交互式輸入
-d #:#是作業號,刪除指定作業,相當于atrm #命令
-c:查看指定作業的具體內容;
-q QUEUE: 指明隊列;

TIME

  1. 確切的某一時刻:
    HH:MM[YYYY-mm-dd]
    noon: 中午12點
    midnight:午夜12點
    teatime:下午4點
    tomorrow
  2. 指定從現在起往后的某個時刻:
    now+#UNIT
    (UNIT: minutes, hours, days, weeks)
    如:2分鐘后執行ls /etc命令。
    [root@localhost ~]# at now+2min #指定任務執行時間。
    at> ls /etc
    at> <EOT> #指定任務內容,完成后Ctrl+D提交。
    job 1 at 2018-06-10 12:08
    [root@localhost ~]# atq
    3 2018-06-10 12:16 a root #atq查看任務列表,也可以使用at -l。
    [root@localhost ~]# mail #執行成功后,會收到郵件。
    Heirloom Mail version 12.4 7/29/08. Type ? for help.
    "/var/spool/mail/root": 2 messages 1 new
    1 user1@localhost.loca Sun Jun 10 11:49 38/1504 "file passwd"
    >N 2 root Sun Jun 10 12:16 164/1874 "Output from your job 3"
    & 2
    Message 2:
    From root@localhost.localdomain Sun Jun 10 12:16:01 2018
    Return-Path: <root@localhost.localdomain>
    X-Original-To: root
    Delivered-To: root@localhost.localdomain
    Subject: Output from your job 3
    To: root@localhost.localdomain
    Date: Sun, 10 Jun 2018 12:16:01 +0800 (CST)
    From: root@localhost.localdomain (root)
    Status: R
    #郵件正文內容為ls /etc的內容。
    adjtime
    aliases
    aliases.db
    alternatives
    anacrontab
    以下省略

2.2、batch命令

batch命令的用法和at相似,只不過它不用指定任務執行的時間,而是在系統空閑時自動執行指定的任務。
如:在系統空閑時執行ls /var,如果設定任務時系統是空閑的,那么這條命令會立即執行。
[root@localhost ~]# batch #batch命令不需要指定時間。
at> ls /var
at> <EOT>
job 4 at 2018-06-10 12:19
[root@localhost ~]# mail #在郵件中查看執行結果。
Heirloom Mail version 12.4 7/29/08. Type ? for help.
"/var/spool/mail/root": 3 messages 1 new
1 user1@localhost.loca Sun Jun 10 11:49 38/1504 "file passwd"
2 root Sun Jun 10 12:16 165/1885 "Output from your job 3"
>N 3 root Sun Jun 10 12:20 30/578 "Output from your job 4"
& 3
Message 3:
From root@localhost.localdomain Sun Jun 10 12:20:07 2018
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Subject: Output from your job 4
To: root@localhost.localdomain
Date: Sun, 10 Jun 2018 12:20:07 +0800 (CST)
From: root@localhost.localdomain (root)
Status: R
#郵件正文為ls /var的內容。
cache
crash
db
empty
games
以下省略

3、cron:周期性任務計劃

cron可以實現系統周期性地執行某一任務,它是由cronie程序包提供的功能,有crond守護進程和相關輔助工具。
[root@localhost ~]# rpm -q cronie
cronie-1.4.4-15.el6.x86_64
要使用cron制定周期性任務,必須確保crond守護進程處于運行狀態,并設置了開機啟動:
[root@localhost ~]# service crond status
crond (pid 1520) is running...
[root@localhost ~]# chkconfig | grep crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off

3.1、crond配置文件

向crond提交作業任務需要使用專用的配置文件。
cron任務分為兩類,系統cron任務和用戶cron任務,所以對應的配置文件也有兩類:

  • 系統cron任務
    系統cron任務需要通過手動編輯/etc/crontab配置文件。配置文件的格式如下:
    SHELL=/bin/bash #執行任務所使用的SHELL。
    PATH=/sbin:/bin:/usr/sbin:/usr/bin #SHELL的PATH變量。
    MAILTO=root #任務執行結果需要通知的用戶。
    HOME=/

    # For details see man 4 crontabs #需要查看詳細說明,使用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

    每一行定制一個周期性任務,共7個字段:

    1. * * * * *,前5個字段用于定義任務執行的周期性時間,按順序分別表示的單位為:分、時、日、月、周,具體的時間格式后面會單獨說明;
    2. user-name,指定運行任務的用戶身份;
    3. command to be executed,要執行的具體任務。
      這里需要注意,由于cron中的PATH變量和系統中的可能不同,所以要使用命令的絕對路徑,或在配置文件中的PATH字段中添加路徑。
  • 用戶cron任務
    用戶cron任務的配置文件為/var/spool/cron/USERNAME。
    配置文件格式和系統cron大致相同,但在定制任務時不需要指定用戶身份。
    用戶cron任務建議使用crontab命令來進行配置,具體命令用法后面會詳細說明。

3.2、cron任務中的時間表示

前面已經提到,周期性時間由每一行的前5個字段表示,時間單位分別為:分、時、日、月、周,時間的指定有5種方法。

  1. 特定值
    此值必須為給定時間單位的有效范圍內的值,比如:在“時”這個字段上,只能指定1-24之間的值。
    另外需要注意,“月”和“周”兩個字段一般不要同時使用。
  2. 所有值,用“*”表示
    表示給定時間單位的有效范圍內的所有值,表示“每..”。比如:在“分”的字段上指定為“*”,表示每分鐘。
  3. 離散值,中間用“,”分隔
  4. 連續值,中間用“-”連接
  5. 定義步長,用“/”表示
    比如,在“時”的字段上指定“*/2”,表示每兩小時。
    注意:給定時間單位的有效范圍內的最大值要能被指定的步長整除,否則無效。比如:在“分”的字段上,不可以指定“*/7”,因為60不能被7整除。
  • 時間表示示例
    (1) 3 * * * *: 每小時執行一次,時間是每小時的第3分鐘;
    (2) 3 4 * * 5: 每周執行一次,時間是每周五4時3分;
    (3) 5 6 7 * *:每月執行一次,時間是每月7號的6時5分
    (4) 7 8 9 10 *: 每年執行一次,時間是每年的10月9號8點7分
    (5) 9 8 * * 3,7: 每周三和周日的8點9分
    (6) 0 8,20 * * 3,7: 每周三和周日的8點和20點
    (7) 0 9-18 * * 1-5:工作時間內的每小時執行一次
    (8) */5 * * * *: 每5分鐘執行一次

3.3、crontab命令

crontab - maintain crontab files for individual users
crontab [-u user] [-l | -r | -e] [-i]

  • 常用選項
    -e: 編輯任務;
    -l: 列出所有任務;
    -r:移除所有任務;即刪除/var/spool/cron/USERNAME文件;
    -i: 在使用-r選項移除所有任務時,提示用戶確認;
    -u user:root用戶可為指定用戶管理cron任務

  • 示例

  1. 在root用戶下,為user1用戶制定每小時執行一次cat /etc/fstab的周期性任務:
    [root@localhost cron]# crontab -u user1 -e #-u指定user1,-e編輯
    no crontab for user1 - using an empty one
    0 * * * * /bin/cat /etc/fstab #編輯周期性任務內容
    crontab: installing new crontab
    [root@localhost cron]# crontab -u user1 -l #查看周期性任務
    0 * * * * /bin/cat /etc/fstab
    [root@localhost cron]# ls /var/spool/cron
    user1 #設定成功后,/var/spool/cron目錄下會有一個以用戶名命名的文件,其中的內容就是剛剛設置的周期性任務。

  2. 制定每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00:
    [root@localhost cron_test]# vim date.sh #編輯腳本
    date +"%Y-%m-%d %H:%M:%S"
    [root@localhost cron_test]# bash date.sh #測試腳本
    2018-06-11 12:34:41
    [root@localhost cron_test]# crontab -e #設置周期性任務
    10 3,5 * * 3 /bin/bash /tmp/testdir/cron_test/date.sh
    crontab: installing new crontab

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容