天天學一個 Linux 命令(98):crontab

命令簡介

在服務器安裝好系統及相關服務以後,對於系統的配置、服務的配置、數據的管理以及服務器的操做權限管理就變的尤其重要。由於,涉及到服務器的各項安全(如:登陸、操做)。shell

crontab 命令用來打開 cron 表進行編輯。centos

定時任務:顧名思義,就是按期執行某項操做或者某種行爲。像Windows系統一樣它也有定時任務服務。緩存

在Linux系統中,crond是Linux系統中用來按期執行命令、腳本或指定程序的一種服務。定時任務通常有如下兩種用途:安全

  • 一、系統自身按期執行的操做或任務(如:日誌輪詢)。
  • 二、用戶按期執行的操做或任務(如:定時更新同步數據、重要數據備份等)。

Linux下的任務調度分爲兩類:系統任務調度和用戶任務調度bash

系統任務調度:系統週期性所要執行的工做,好比寫緩存數據到硬盤、日誌清理等。在/etc/目錄下有一個crontab文件,這個就是系統任務調度的配置文件。服務器

/etc/crontab 文件內容以下運維

[root@centos7 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see 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

從上機的配置文件,能夠看出系統定時任務格式/etc/crontab分爲6段,以空格分隔。前5段爲時間格式,第6段是所需執行的命令。詳細的說明:測試

minute  #分鐘,能夠是從0到59之間的任何整數
hour   #小時,能夠是從0到23之間的任何整數
day    #日期,能夠是從1到31之間的任何整數
month  #月份,能夠是從1到12之間的任何整數
week   #星期,能夠是從0到7之間的任何整數,這裏的0或7表明星期日
command  #執行的命令,能夠是系統命令,也能夠是本身編寫的腳本文件

在上述的配置字段中,還會使用到下面的特殊字符centos7

*(星號)  #表示全部值。好比在第一段中若是使用*,則表示在知足其餘條件的同時每分鐘都執行後面的命令操做。
,(逗號)  #用逗號分隔的值表示指定的一個範圍。好比在第四段使用1,3,5,7,則表示在第1,3,5,7月的含義。
—(中槓)  #表示一個範圍。好比在第二段使用0-8,則表示0點到8點這一區間範圍。
/(正斜線)  #表示一個時間的間隔頻率。好比在第一段使用*/5,則表示每間隔5分鐘的含義。

語法格式

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

選項說明

-e  #編輯該用戶的計時器
-l  #列出該用戶的計時器
-r  #刪除該用戶的計時器
-u<用戶名稱>  #指定要設定計時器的用戶名稱

定時任務書寫與配置

書寫定任務規範

在平常實際生產、測試環境中,書寫定時任務是須要遵照必定的規範、規則的。筆者根據本身實際生產環境書寫經驗,總結以下:3d

  • 一、書寫定時任務時必須對每一行或一段加上註釋信息。
  • 二、如裏是以shell腳本執行的任務,在最前面加上解釋/bin/sh。
  • 三、對於執行腳本的定時任務,需在其結尾加上>/dev/null 2>&1將一些沒必要要的輸出信息重定向到空,也就是不輸出不須要的信息。
  • 四、使用系統或服務命令要使用絕對路徑,再寫到腳本,最後將腳本寫進定時任務中。
  • 五、規範使用目錄(如定時任務執行的腳本目錄設置成/server/cron_scripts)。
2)定時任務配置

實際生產、測試環境,對於定時任務的配置也是須要有必定操做規範的,具體以下:

  • 一、對於執行命令的形式的定時任務,須要先測試命令執行狀況,確認無誤後將執行的命令寫進腳本。
  • 二、對於腳本形式的定時任務,首先就是須要調試腳本的總體執行狀況,而後使用規範目錄路徑寫進定時任務。
  • 三、對於生產環境的定時任務操做,必須在測試環境進行反覆測試,確認無誤後再應用到實際生產環境中,而後在定時任務執行後人工進行檢查執行狀況。

對於定時任務的具體實例及各種操做,可參考官方文檔說明。讀者也可在本身的實驗環境進行書寫、配置,本章節就不作過多贅述。

以上的內容源自民工哥的新書《 Linux 系統運維指南 從入門到企業實戰

應用舉例

查看當前登陸用戶下的定時任務狀況

[root@centos7 ~]# crontab -l
no crontab for root

每小時的第5和第15分鐘執行

5,15 * * * * command_name

在上午9點到11點的第5和第15分鐘執行

5,15 9-11 * * * command_name

每隔3天的上午9點到11點的第5和第15分鐘執行

5,15 9-11 */3 * * command_name

每一個星期一的上午9點到11點的第5和第15分鐘執行

5,15 9-11 * * 1 command_name

每個月一、十一、21日的14:45重啓httpd

45 14 1,11,21 * * /etc/init.d/httpd restart

每週6、週日的1:10重啓smb

10 1 * * 6,0 /etc/init.d/httpd restart

每小時執行/etc/scripts/test.sh這個腳本

01 * * * * /etc/scripts/test.sh

天天學一個 Linux 命令(96):ntpdate

天天學一個 Linux 命令(97):jobs

相關文章
相關標籤/搜索