1. 程式人生 > >linux--工作排程(計劃任務)

linux--工作排程(計劃任務)

linux工作排程有兩種:at,cron

· at:at是一個可以處理僅執行一次就結束排程的命令。說白了就是在某個時間需要幹某一件事,例如在2018年10月12日下午一點要執行一個數據庫矯正指令碼。

· crontab:crontab是週期性的排程設定的命令。說白了就是週期性的例如每天下午1點都要去執行一個數據庫矯正指令碼。

一、at的使用

1、at啟動

  1.1可以使用/etc/init.d/atd restart 啟動at服務

  1.2可以使用chkconfig atd on設定服務開機自啟

2、at的執行方式

使用at生成所要執行的排程任務是會在/var/spool/at/目錄下生成一個如下圖所示(此次生成名為a0000401877c58)的檔案。待任務執行後該檔案會自動刪除。

  

 3、哪些使用者可以使用at?

我們可以使用兩個檔案/etc/at.allow和/etc/at.deny來控制at的使用限制。

  3.1 /etc/at.allow,被該檔案記錄的使用者可以使用at

  3.2  /etc/at.deny,被該檔案記錄的使用者不能使用at

  3.3一般系統中只有at.deny檔案,並且該檔案為空。即所有使用者都可以使用at命令。

    3.3.1、如果兩個檔案都不存在,則只有root使用者才能使用crontab命令。 
    3.3.2、如果cron.allow存在但cron.deny不存在,則只有列在cron.allow檔案裡的使用者才能使用crontab命令,如果root使用者也不在裡面,則root使用者也不能使用crontab。 
    3.3.3、如果cron.allow不存在, cron.deny存在,則只有列在cron.deny檔案裡面的使用者不能使用crontab命令,其它使用者都能使用。 
    3.3.4、如果兩個檔案都存在,則列在cron.allow檔案中而且沒有列在cron.deny中的使用者可以使用crontab。如果兩個檔案中都有同一個使用者,以cron.allow檔案裡面是否有該使用者為準,如果cron.allow中有該使用者,則可以使用crontab命令。 

      

4、at的語法格式。

· at [-dvlm] TIME

· at -c 任務編號

  4.1、at  -m:當at排程任務完成後,即使沒有輸出資訊,也要給使用者傳送email。

  4.2、at  -l:相當於atq,列出當前系統上的所有使用者的at排程任務。

  4.3、at  -d:相當於atrm,可以取消一個在at排程列表中的任務。

  4.4、at  -v:使用較明顯的時間格式列出at排程任務列表。

  4.5、at -c:可以列出指定任務的實際命令內容。

  4.6、TIME的格式:

    4.6.1、HH:MM:例如,4:30在今天的4點30分執行,若已經超過該時刻則在下一天的指定時間執行。。

    4.6.2、HH:MM  YYYY-MM-DD:例如,4:30 2018-9-31

    4.6.3、HH:MM + number [minutes/hours/days/weeks]:例如 now + 5 minutes,在現在往後五分鐘後執行。

注意,at命令執行與終端無關,預設將所有的standed output/standard error output 輸出至執行者的mailbox中。所以如果任務中有例如"echo "hello""命令時在終端是看不到的,此時要想看到可以吧輸出重定向,例如你在tty1登入,可以使用“echo "hello" >/dev/tty1” 。 

 

二、crontab的使用

1、啟動

  1.1:可以使用/etc/init.d/crond start 啟動服務

  1.2:可以使用systemctl enable crond設定開機自啟

2、哪些使用者可以使用crontab命令。

  預設所有使用者均可以使用crontab命令。因為系統中只存在/etc/cron.deny檔案,而該檔案為空。其他的同上文的at。

  

  如果不希望某使用者使用crontab命令,可以將使用者名稱寫在/etc/cron.deny中。

3、cron的執行方式

  3.1、/var/spool/cron下的crontab檔案不可以直接建立或者直接修改。該crontab檔案是通過crontab命令建立的。當用戶使用crontab命令建立排程任務時,該項工作會被寫到/var/spool/cron/目錄下,以使用者名稱命名的檔案中,例如使用使用者sa建立了任務,那麼就會存在/var/spool/cron/sa檔案。

  3.2、cron任務會被記錄到/var/log/cron檔案中。

4、cron語法

  4.1、crontab [-u username] [ -l|-e|-r]

    -u user:智慧root使用者來執行,用來設定某個使用者的crontab服務,例如,“-u sa”表示設定sa使用者的crontab服務。

    -e:編輯當前使用者crontab檔案內容。

    -l:顯示crontab檔案內容,如果不指定使用者,則表示顯示當前使用者的crontab檔案內容。

    -r:刪除當前使用者所有crontab的排程任務,如果要刪除某一項任務,可以使用crontab -e去編輯。

  4.2、crontab -e命令所編輯的檔案的格式:

    4.2.1、欄位之間以空格分隔

    4.2.2、一共6個欄位,前五個指定時間,最後一個為執行的命令,格式如下

    {minute}  {hour}  {day-of-month}  {month} {day-of-week}  {full-path-to-shell-script}   
     minute: 區間為 0 – 59 
     hour: 區間為0 – 23 
     day-of-month: 區間為0 – 31 
     month: 區間為1 – 12. 1 是1月. 12是12月.
     Day-of-week: 區間為0 – 7. 週日可以是0或7

     時間欄位可以搭配幾個特殊的符號——"*"、"/"、"-"、",",

    *:代表所有的取值範圍內的數字,即任何時刻都接受。

    "/":代表每的意思,每隔n分鐘的意思,例如"/5"表示每5個單位,

    "-":代表一段時間範圍,即從某個時間到某個時間,

    ",":代表分隔時段的意思,例如每天三點和6點都要執行某一任務。

 

 5、系統配置檔案:/etc/crontab

crontab -e是針對使用者(非root等系統使用者)的cron,如果是系統使用者只需要編輯/etc/crontab就可以。

  5.1、/etc/crontab檔案內容

    

  • 01 * * * * root run-parts /etc/cron.hourly:在 #run-parts 這一行以後的命令,我們可以發現,五個數字後面接的是 root ,這一行代表的是執行的級別為root身份當然,你也可以將這一行改為成其他的身份!而 run-parts代表後面接的 /etc/cron.hourly 是一個目錄內(/etc/cron.hourly)的所有可執行文,也就是說,每個小時的01分,系統會以root身份去/etc/cron.hourly這個目錄下執行所有可執行的檔案!後面三行也是類似的意思!你可以到 /etc/ 底下去看看,系統本來就預設了這4個目錄!你可以將每天需要執行的命令直接寫到/etc/cron.daily即可,還不需要使用到crontab -e的程式!

    

   MAILTO=root:當/etc/crontab檔案中的任務執行發生錯誤或該工作的執行結果輸出至stdout或stderr時,將資訊傳送給哪個使用者,預設是給root傳送郵件。我們可以指定某一使用者。