Linux之計劃任務

Linux之計劃任務

計劃任務特性

1. 需要在指定的某時間段運行
2. 需要將任務結果郵件通知用戶
3. 單次任務及循環任務區別

Linux計劃任務的實現工具

1. at工具
  • 其只能執行一次性任務

  • 其會自動加載部分環境變量

  • 可以執行命令

  • 可以執行腳本

  • 作業有隊列,用單字母表示,默認爲a隊列

  • 作業計劃任務是以絕對序列值進行排序

  • 任務結果會以郵件的形式通知用戶

2. batch工具
  • 其使用方法與at工具類似

  • 最大的區別爲:它會選擇系統在比較空閒的時間段執行任務

3. crontab命令
  • 其可以循環執行任務,實現週期性任務

  • 最小時間單位爲分鐘,如果需要到級別,需要你是用外部機制

  • 可以執行命令

  • 可以執行腳本

  • 每次的任務都會發送郵件至用戶通知

  • 其依賴於crond守護進程及相關輔助工具,cronie是其主程序包

一、at工具

synopsis: at [OPTIONS]...time

  • [time]格式

    • 20:10 2015-10-30

    • HH:MM[YYYY-mm-dd]

    • noon : 正午

    • midnight : 午夜

    • teatime : 下午4點

    • tomorrow : 明天

    • now +# UNIT

        * UNIT: min,hours,days,weeks
  • [options]

    • at -d 3 ==    atrm 3 :刪除第3號任務

    • at -f at.sh now+5min

    • -l : 列出任務隊列,相當於atq命令

    • -f FILE : 從指定文件中讀取作業任務,不用交互式輸入

    • -d # : 刪除任務

    • -c # : 查看指定任務的內容

    • -q a|b|c|d : 指定默認隊列

二、crontab工具

cron任務的分類
  • 系統cron任務

    • 直接編輯/etc/crontab文件

    • /etc/crontab

    • 配置文件

    • 配置命令

  • 用戶cron任務(root用戶也不例外)

    • crontab -e

    • /var/spool/cron/USERNAME

    • 配置文件

    • 配置命令

/etc/crontab文件的格式
    # .---------------- 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
  • 每一行定義一個週期性任務

  • 此處的環境變量不同於用戶登錄後獲得的環境,因此,建議命令使用絕對路徑,或自定義path環境變量

  • 執行結果郵件發送給想着用戶,即mailto=中定義的用戶

  • 普通用戶不需要定義mailto參數,因爲他的任務文件就以用戶名命名

  • 共7個字段

  • 如果命令中有%這類的符號,需要轉義,但旋轉到單引號中的不用轉義

crontab命令:

synopsis - crontab [-u user] [-l | -r | -e] [-i] [-s]

  • [options]

    • -e : 編輯任務,建議使用crontab -e,這樣可以幫忙檢查其錯誤

    • -l : 列出所有任務

    • -r : 移除所有任務,即刪除對應/var/spool/cron/USERNAME文件

    • -i : 交互式,在使用-r刪除所有用戶時,提示用戶確認

    • -u USER : root用戶可以爲指定的用戶管理、指定任務

注意:運行結果會以郵件方式通知當前用戶,如果拒絕接收郵件,可以會導致未備份成功卻沒有任何消息反饋的情況,建設如下操作:
  • COMMAND > /dev/null : 將正確結果刪除,只返回錯誤輸出併發送郵件至用戶

  • COMMAND &> /dev/null : 不建議此操作

  • 指定的某任務在指定的時間因關機未能執行,下次開機不會自動執行

  • 如果某時間點因故未能按時執行,下次開機後無論是否到了相應時間點,都要補充執行一次,可使用anacron實現

練習:

  1. 每12小時備份一次/etc目錄至/backups目錄中,保存格式爲etc-yyy-mm-dd-hh.tar.xz”

  • 01 */12 * * * root tar Jcf /backups/etc-$(date +"\%F-\%H-\%S").tar.xz /etc/

每週2、4、7備份/var/log/secure文件至/logs目錄中,文件名格式爲 secure-yyyymmdd
  • 01 09 * * 2,4,7 root tar Jcf /logs/secure-$(date +"\%Y\%m\%d") /var/log/secure

每兩個小時取當前系統/proc/meminfo文件中以S或M開頭的行信息追加至/tmp/meminfo.txt文件中
  • 01 */2 * * * root grep '^[M\|S]' /proc/meminfo > /tmp/meminfo.txt


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章