Linux定時啟動任務的一些命令

來源:互聯網
上載者:User

使用自動啟動進程的功能,就需要掌握以下幾個啟動命令:

  at 命令
==================================================================
  at [-V] [-q 隊列 ] [-f 檔案名稱 ] [-mldbv] 時間
  at -c 作業 [ 作業 ...]
  at 允許使用一套相當複雜的指定時間的方法,實際上是將 POSIX.2 標準擴充了。它可以接受在當天的 hh:mm (小時  : 分鐘)式的時間指定。如果該時間已經過去,那麼就放在 第二天執行。使用者還可以採用 12 小時計時制,即在時間後面加上 AM (上午)或者 PM (下午)來說明是上午還是下午。可以指定命令執行的具體日期,指定格式為 month day (月 日)或者 mm/dd/yy (月 / 日 / 年)或者 dd.mm.yy (日 . 月 . 年)。指定的日期必須跟在指定時間 的後面。

  上面介紹的都是絕對計時法,其實還可以使用相對計時法。 指定格式為: now + count time-units , now 就是目前時間, time-units 是時間單位,這裡可以是 minutes (分鐘)、 hours (小時)、 days (天)、 weeks (星期)。 count 是時間的數量,究竟是幾天,還是幾小時,等 等。還有一種計時方法就是直接使用 today (今天)、 tomorrow (明天)來指定完成命令的時間。

  [例]指定在今天下午 5:30 執行某命令。假設現在時間是中午 12:30 , 2008 年 2 月 24 日,其命令格式如下:
  at 5:30pm
  at 17:30
  at 17:30 today
  at now + 5 hours
  at now + 300 minutes
  at 17:30 24.2.99
  at 17:30 2/24/99
  at 17:30 Feb 24

[例]
  $at -f work 4pm + 3 days
  在三天后下午 4 點執行檔案 work 中的作業。
  $at -f work 10am Jul 31
  在 7 月 31 日上午 10 點執行檔案 work 中的作業。
  在任何情況下,超級使用者都可以使用這個命令。對於其他使用者來說,是否可以使用就取決於兩個檔案: /etc/at.allow和 /etc/at.deny 。如果 /etc/at.allow 檔案存在的話,那麼只有在其中列出的使用者才可以使用 at 命令;如果該檔案不存在,那麼將檢查 /etc/at.deny 檔案是否存在,在這個檔案中列出的使用者均不能使用該命令。如果兩個檔案都不存在,那麼只有超級使用者可以使用該命令;空的 /etc/at.deny檔案意味著所有的使用者都可以使用該命令,這也是預設狀態。

  如果 at 命令是從一個使用 su 命令切換到使用者 shell 中執行的,那麼目前使用者被認為是執行使用者,所有的錯誤和輸出結果都會送給這個使用者。但是如果有郵件送出的話,收到郵件的將是原來的使用者,也就是登入時 shell 的所有者。
   at  命令中的參數
-V 將標準版本號碼列印到標準錯誤中。
-q queue 使用指定的隊列。隊列名稱是由單個字母組成,合法的隊列名可以由 a-z 或者 A-Z 。 a 隊列是 at 命令的預設隊列。
-m 作業結束後發送郵件給執行 at 命令的使用者。
-f file 使用該選項將使命令從指定的 file 讀取,而不是從標準輸入讀取。
-l atq 命令的一個別名。該命令用於查看安排的作業序列,它將列出使用者排在隊列中的作業,如果是超級使用者,則列出隊列中的所有工作。命令的文法格式如下 :atq [-V] [-q 隊列 ][-v]
-d atrm 命令的一個別名。該命令用於刪除指定要執行的命令序列,文法格式如下 :atrm [-V] 作業 [ 作業 ...]
-c 將命令列上所列的作業送到標準輸出。
  $ at 2:00 12/25/08
  warning:command will be executed using /bin/sh.
  提醒使用者將使用哪個 shell 來執行該命令序列。 然後系統出現 at> 提示符,等待使用者輸入進一步的資訊,也就是需要執行的命令序列:
  at> find / -name “*.txt”|lpr
  at> echo “foxy : All texts have been printed.You
  can take them over.Good day!River” |mail -s ”job
  done” foxy
  輸入完每一行指令然後斷行符號,所有指令序列輸入完畢後,使用按鍵組合結束 at 命令的輸入。這時候螢幕將出現如下資訊:
  job 1 at 2008-12-25 02:00
  實際上如果命令序列較長或者經常被執行的時候,一般都採用將該序列寫到一個檔案中,然後將檔案作為 at 命令的輸入來處理。這樣不容易出錯。
[  例 ] 找出系統中所有以 txt 為尾碼名的檔案,並且進行列印。列印結束後給使用者 foxy 發出郵件通知取件。指定時間為十二月二十五日淩晨兩點。
 $at </tmp/aa 2:00 12/25/08
 /tmp/aa 中的內容為
 find / -name “*.txt” | lpr
 echo “foxy:All texts have been printed. River” |mail -s
 ”JobDone” foxy
 系統會在十二月二十五日淩晨兩點尋找系統中所有的副檔名為 txt 的檔案列印,列印完畢給 foxy 發送一封郵件,在這裡重新導向符 < 可以使用 -f 參數

  batch 命令

==================================================================
  batch 用低優先順序運行作業,該命令幾乎和 at 命令的功能完全相同,唯一的區別在於, at 命令是在指定時間,很精確的時刻執行指定命令;而 batch 卻是在系統負載較低,資源比較閒置時候執行命令。該命令適合於執行佔用資源較多的命令。
  batch 命令的文法格式也和 at 命令十分相似,即batch [-V] [-q 隊列 ] [-f 檔案名稱 ] [-mv] [ 時間 ]
  一般地說,不用為 batch 命令指定時間參數,因為 batch本身的特點就是由系統決定執行任務的時間,如果使用者再指
  定一個時間,就失去了本來的意義。具體的參數解釋可以參考 at 命令。
  $batch
  at> find / -name *.txt|lpr
  at> echo “foxy : All texts have been printed.You  can take them over.Good day!River” |mail -s ”job  done” foxy
  所有指令序列輸入完畢後,使用按鍵組合結束 at 命令的輸入 。

  cron 命令

==================================================================

    前面的 at 和 batch 命令都會在一定時間內完成一定任務,但是要注意它們都只能執行一次。也就是說,當指定了運行命令後,系統在指定時間完成任務,一切就結束了。但是在很多時候需要不斷重複一些命令,這時候就可以使用 cron 命令來完成任務。
    cron 命令在系統啟動時就由一個 shell 自動啟動,進入後台(所以不需要使用 & 符號)。
    一般的使用者沒有運行該命令的許可權,雖然超級使用者可以手工啟動 cron ,不過還是建議將其放到 shell 中由系統自行啟動。
    首先 cron 命令會搜尋 /var/spool/cron 目錄,尋找以 /etc/passwd 檔案中的使用者名稱命名的 crontab 檔案,被找到的這種檔案將載入記憶體。例如 /etc/passwd 中一個使用者名稱為foxy 的使用者,它所對應的 crontab 檔案就應該  是 /var/spool/cron/foxy 。也就是說,以該使用者命名的crontab 檔案存放在 /var/spool/cron 目錄下面。 cron 命令還將搜尋 /etc/crontab 檔案,這個檔案是用不同的格式寫成的。
    cron 啟動以後,它將首先檢查是否有使用者佈建了 crontab檔案,如果沒有就轉入“休眠”狀態,釋放系統資源。所以該後台進程佔用資源極少。它每分鐘“醒”過來一次,查看當前是否有需要啟動並執行命令。命令執行結束後,任何輸出都將作為郵件發送給 crontab 的所有者,或者是/etc/crontab 檔案中 MAILTO 環境變數中指定的使用者。

   上面簡單介紹了一些 cron 的工作原理,但是 cron 命令的執行不需要使用者幹涉;需要使用者修改的是 crontab 中要執行的命令序列,所以下面介紹 crontab 命令。

  crontab 命令

==================================================================

      crontab 命令用於安裝、刪除或者列出用於驅動 cron 後台進程的表格。也就是說,使用者把需要執行的命令序列放到rontab 檔案中以獲得執行。每個使用者都可以有自己的rontab 檔案。下面就來看看如何建立一個 crontab 檔案。
      在 /var/spool/cron 下的 crontab 檔案不可以直接建立或者直接修改。 crontab 檔案是通過 crontab 命令得到的。現在假設有個使用者名稱為 foxy ,需要建立自己的一個 crontab檔案。首先可以使用任何文字編輯器建立一個新檔案,然後向其中寫入需要啟動並執行命令和要定期執行的時間。然後存檔退出。假設該檔案為 /tmp/test.cron 。再後就是使用 crontab 命令來安裝這個檔案,使之成為該使用者的crontab 檔案。輸入: crontab test.cron這樣一個 crontab 檔案就建立好了。可以轉到 /var/spool/cron 目錄下面查看,發現多了一個 foxy 檔案。這個檔案就是所需的 crontab 檔案。

  crontab 命令的文法格式
  crontab [ -u user ] file
  crontab [ -u user ] {-l|-r|-e}
      第一種格式用於安裝一個新的 crontab 檔案,安裝來源就是 file 所指的檔案,如果使用“ -” 符號作為檔案名稱,那就意味著使用標準輸入作為安裝來源。
  -u 如果使用該選項,也就是指定了是哪個具體使用者的crontab 檔案將被修改。如果不指定該選項, crontab 將預設是操作者本人的 crontab ,也就是執行該 crontab 命令的使用者的 crontab 檔案將被修改。但是請注意,如果使用了 su 命令再使用 crontab 命令很可能就會出現混亂的情況。所以如果是使用了 su 命令,最好使用 -u 選項來指定究竟是哪個使用者的 crontab 檔案。
  -l 在標準輸出上顯示當前的 crontab 。
  -r 刪除當前的 crontab 檔案。
  -e 使用 VISUAL 或者 EDITOR 環境變數所指的編輯器編輯當前的 crontab 檔案。當結束編輯離開時,編輯後的檔案將自動安裝。

  crontab 檔案的格式說明 :
  * 逗號 (',') 指定列表值。如 : "1,3,4,7,8"
  * 中橫線 ('-') 指定範圍值 如 "1-6", 代表 "1,2,3,4,5,6"
  * 星號 ('*') 代表所有可能的值
     在 crontab 檔案中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。每個域之間使用空格或者定位字元分隔,每個域當中有多個值的時候可以使用逗號來分隔。
  # Use the hash sign to prefix a comment
  # +------------ minute (0 - 59)
  # | +---------- hour (0 – 23 , 00 點就是晚上 12 點 )
  # | | +-------- day of month (1 - 31)
  # | | | +------ month (1 - 12)
  # | | | | +---- day of week (0 - 7) (Sunday=0 or 7)
  # | | | | |
  # * * * * * command to be executed

  [例]
  5,15,25,35,45,55 16,17,18 * * * command
  這就是表示任意天任意月,其實就是每天的 16 點、 17 點、 18點的 5 min 、 15 min 、 25 min 、 35 min 、 45 min 、 55  min 時執行 command 命令。
  [ 例 ] 每天每小時的 1 分執行使用者目錄下的 bin/account 這個指令:
  1 * * * * bin/account
  [例]
  每天三點二十分執行使用者目錄下如下所示的兩個指令 ( 每個指令以 ; 分隔 )
  20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st)
  [ 例 ] 我們來看一個超級使用者的 crontab 檔案:
  #Run the ‘atrun' program every minutes
  #This runs anything that's due to run from ‘at’.See man  ‘at’ or ‘atrun’.
  0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
  40 7 * * * updatedb
  8,10,22,30,39,46,54,58 * * * * /bin/sync

      如果需要改變其中的命令內容時,還是需要重新編輯原來的檔案,然後再使用 crontab命令安裝。
      可以使用 crontab 命令的使用者是有限制的。 如果 /etc/cron.allow 檔案存在,那麼只有 其中列出的使用者才能使用該命令;如果該檔案不存在但 cron.deny 檔案存在,那麼只有未列在該檔案中的使用者才能使用 crontab 命令;如果兩個檔案都不存在,那就取決於一些參數的設定,可能是只允許超級使用者使用該命令,也可能是所有使用者都可以使用該命令。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.