Linux成長之路(五)——Linux任務計劃crontab和命令執行順序控制與管道

Linux任務計劃crontab

  • crontab的使用
    我們時常會有一些定期定時的任務,如週期性的清理一下/tmp,週期性的去備份一次數據庫,週期性的分析日誌等等。而且有時候因爲某些因素的限制,執行該任務的時間會很尷尬。本文將帶你很好的利用 Linux 系統的計劃工具。

    • crontab簡介
      crontab 命令常見於 Unix 和類 Unix 的操作系統之中(Linux 就屬於類 Unix 操作系統),用於設置週期性被執行的指令。該命令從輸入設備讀取指令,並將其存放於 crontab 文件中,以供之後讀取和執行。通常,crontab 儲存的指令被守護進程激活,crond 爲其守護進程,crond 常常在後臺運行,每一分鐘會檢查一次是否有預定的作業需要執行。

      通過 crontab 命令,我們可以在固定的間隔時間執行指定的系統指令或 shell script 腳本。時間間隔的單位可以是分鐘、小時、日、月、周的任意組合。

    • crontab準備
      crontab 在本實驗環境中需要做一些特殊的準備,首先我們會啓動 rsyslog,以便我們可以通過日誌中的信息來了解我們的任務是否真正的被執行了。虛擬機中的系統默認已經啓動了rsyslog。
      這裏寫圖片描述
      同樣crontab也已經自動啓動。

    • crontab使用
      【crontab -e】用來添加一個計劃任務,第一次運行這個命令時會讓用戶選擇一個喜歡的編輯器(這裏選擇Vim):
      這裏寫圖片描述

      然後就會進入到編輯Vim頁面:
      這裏寫圖片描述

      下面介紹crontab的添加的命令的格式:
      這裏寫圖片描述

      下面我們舉一個栗子:
      在文檔的最後一排加上這樣一排命令,該任務是每分鐘我們會在/home/shiyanlou目錄下創建一個以當前的年月日時分秒爲名字的空白文件:
      這裏寫圖片描述
      注意:“ % ” 在 crontab 文件中,有結束命令行、換行、重定向的作用,前面加 ” \ ” 符號轉意,否則,“ % ” 符號將執行其結束命令行或者換行的作用,並且其後的內容會被做爲標準輸入發送給前面的命令。

      添加成功後保存文件,會有提示:installing new crontab
      這裏寫圖片描述
      也可以用【crontab -l】來查看:
      這裏寫圖片描述

      雖然我們添加了任務,但是如果 cron 的守護進程並沒有啓動,它根本都不會監測到有任務,當然也就不會幫我們執行,我們可以通過以下2種方式來確定我們的 cron 是否成功的在後臺啓動,默默的幫我們做事,若是沒有就得執行上文準備中的第二步了。
      這裏寫圖片描述

      這裏寫圖片描述
      可以看到確實每隔一分鐘都有一個文件產生。
      我們通過這樣一個命令可以查看到執行任務命令之後在日誌中的信息反饋:
      這裏寫圖片描述

      刪除crontab計劃任務:
      這裏寫圖片描述

  • crontab的深入
    這個 crontab -e 是針對使用者的 cron 來設計的,也就是每個用戶在添加任務,就會在/var/spool/cron/crontabs 中添加一個該用戶自己的任務文檔,這樣可以做到隔離,獨立,不會混亂。
    這裏寫圖片描述

    如果是系統的例行性任務 時,該怎麼辦呢?是否還是需要以 crontab -e 來管理你的例行性工作排程呢?當然不需要,你只要編輯 /etc/crontab 這個檔案就可以啦!有一點需要特別注意!那就是 crontab -e 這個 crontab 其實是 /usr/bin/crontab 這個執行的,只是你可以 root 的身份編輯一下這個文檔!

    基本上, cron 這個服務的最低偵測限制是分鐘,所以 cron 會每分鐘去讀取一次 /etc/crontab 與 /var/spool/cron/crontabs 裏面的資料內容 ,因此,只要你編輯完 /etc/crontab 這個文檔,並且將他存儲之後,那麼 cron 的設定就自動的執行了!

    在/etc目錄下,我們可以觀察到關於 cron 的文件有一下幾個,他們的作用又是什麼:
    這裏寫圖片描述

    /etc/cron.daily,目錄下的腳本會每天讓執行一次,在每天的6點25分時運行;
    /etc/cron.hourly,目錄下的腳本會每個小時讓執行一次,在每小時的17分鐘時運行;
    /etc/cron.mouthly,目錄下的腳本會每月讓執行一次,在每月1號的6點52分時運行;
    /etc/cron.weekly,目錄下的腳本會每週讓執行一次,在每週第七天的6點47分時運行;
    當然,以上的時間均是系統默認時間,可以根據自己的需求進行修改。

命令執行順序控制與管道

  • 命令執行順序的控制

    • 順序執行多條命令
      假設我們有一堆命令要運行,又不想一個一個運行-等待-運行-等待…這時就可以使用“;”來進行批量順序運行命令。
      這裏寫圖片描述

    • 有選擇的執行命令
      我們有時候需要像代碼那樣讓有些命令根據前面命令的執行情況來判斷該條命令是否應該執行,比如如果我們要在ls命令安裝了的情況下看看用戶目錄下的文件:
      這裏寫圖片描述
      說明:因爲ls存在,所以【which ls】返回值爲0,&&表示的是如果返回值爲0則運行下一句,否則就不運行。
      再看一個栗子:
      這裏寫圖片描述

      竟然有&&就一定有||,所以||是當上一條命令返回值爲1時運行下一句:
      這裏寫圖片描述

      這裏寫圖片描述

  • 管道
    管道是一種通信機制,通常用於進程間的通信(也可通過socket進行網絡通信),它表現出來的形式就是將前面每一個進程的輸出(stdout)直接作爲下一個進程的輸入(stdin)。

    • 試用
      我們用ls -a -l命令查看 /etc文件,因爲內容過多,所以我們可以用管道來將它的內容作爲less命令的輸入:
      這裏寫圖片描述
    • 打印每一行的某一字段【cut】
      打印/etc/passwd文件中以:爲分隔符的第1、3、4個字段:
      這裏寫圖片描述

      這裏寫圖片描述

      這裏寫圖片描述

    • 在文本中或stdin中查找匹配字符串【grep】
      grep命令是很強大的,也是相當常用的一個命令,它結合正則表達式可以實現很複雜卻很高效的匹配和查找,不過在學習正則表達式之前,這裏介紹它簡單的使用,而關於正則表達式後面將會有單獨一小節介紹到時會再繼續學習grep命令和其他一些命令。

      先體驗一下,我們搜索/home/gcg目錄下所有包含”gcg”的所有文本文件,並顯示出現在文本中的行號:
      這裏寫圖片描述
      說明:-r 參數表示遞歸搜索子目錄中的文件,-n表示打印匹配項行號,-I表示忽略二進制文件。這個操作實際沒有多大意義,但可以感受到grep命令的強大與實用。

      也可以在結果中用grep匹配含*cg的環境變量:
      這裏寫圖片描述

    • 簡單小巧的技術工具【wc】
      wc 命令用於統計並輸出一個文件中行、單詞和字節的數目,比如輸出/etc/passwd文件的統計信息:
      這裏寫圖片描述

      這裏寫圖片描述

      再來結合管道來操作一下,下面統計 /etc 下面所有目錄數:
      這裏寫圖片描述

    • 排序命令【sort】
      功能很簡單就是將輸入按照一定方式排序,然後再輸出,它支持的排序有按字典排序,數字排序,按月份排序,隨機排序,反轉排序,指定特定字段進行排序等等。

      默認是字典排序:
      這裏寫圖片描述

      反轉排序:
      這裏寫圖片描述

      安特定字段排序:
      這裏寫圖片描述
      說明:上面的-t參數用於指定字段的分隔符,這裏是以”:”作爲分隔符;-k 字段號用於指定對哪一個字段進行排序。

      上面那個是按字典排序,這個是按數字大小排序:
      這裏寫圖片描述

    • 去重命令 【uniq】
      uniq命令可以用於過濾或者輸出重複行。

      • 過濾重複行
        實驗:
        1、先用【history】命令查看歷史使用過的命令:
        這裏寫圖片描述
        2、去掉命令參數,只留下命令本身:
        這裏寫圖片描述
        3、過濾連續重複命令:
        這裏寫圖片描述
        說明:這裏只會過濾掉連續重複行,而不是全文重複的命令,這裏可以先排序,再來過濾(也可先過濾再排序):
        這裏寫圖片描述

        這裏寫圖片描述

      • 輸出重複行
        輸出重複過的行(只輸出1個)和它的重複次數:
        這裏寫圖片描述

        輸出所有重複的行:
        這裏寫圖片描述


參考文獻:https://www.shiyanlou.com/courses/1
注:轉載請註明原文出處:
作者:CUG_UESTC
出處:http://blog.csdn.net/qq_31192383/article/details/53234512

發佈了30 篇原創文章 · 獲贊 252 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章