首頁 > 軟體

在Ubuntu 14.04使用Cron實現作業自動化

2020-06-16 17:55:58

Cron是Linux系統中最有用的工具之一,cron作業是在指定時間到來時被排程執行的作業。
最常見的自動化系統管理和自動維護工作,比如每天發出的按計劃完成了備份的通知,或者是按計劃定時清理/tmp/目錄的通知。還有很多Web應用程式也需要執行定時作業。
本文講述了Cron的工作機制,你可以用cron實現排程作業作業。Cron本身是一個守護行程,在後台執行,通過組態檔“crontab”來根據時間排程指定的作業執行。

一、啟動Cron服務

基本上所有的Linux發行版在預設情況下都預安裝了cron工具。即使未預裝cron,也很簡單,執行命令手動安裝它:

root@Ubuntu-14:~# apt-get install cron

接著檢查cron服務的狀態,預設情況它應該執行於後台。如果它未啟動,那麼可以手動啟動此服務。

root@ubuntu-14:~# service cron start
root@ubuntu-14:~# service cron status 
cron start/running, process 1027

二、使用Cron幫助

如果cron工作正常,那麼你可以使用man命令檢視其手冊描述的詳細用法。

root@ubuntu-14:~# man crontab

上面的命令顯示了crontab手冊描述的使用方法。如果要檢視怎樣使用cron作業指定的資訊,可以這樣:

root@ubuntu-14:~# man 5 crontab


要退出幫助命令手冊的顯示,按下q鍵或h鍵。

三、Crontab命令的用法

下面講述怎樣使用crontab命令實現定時排程作業。

1、對Cron作業進行列表

使用以下命令列出當前使用者計劃的cron作業。

root@ubuntu-14:~# crontab –l

會列出當前使用者的所有cron作業,如果想檢視其它使用者的cron作業,可以使用如下命令:

root@ubuntu-14:~# crontab –l –u username

這會列出指定使用者的cron作業。

2、編輯Cron作業

要新增一個新cron作業,或者是編輯現有的cron作業,可以使用如下命令:

root@ubuntu-14:~# crontab -e

3、移除Cron作業

使用下面的命令移除已經計劃的cron作業。

root@ubuntu-14:~# crontab –r

使用下面的命令移除所有已計劃的cron作業,且無需再次確認。

root@ubuntu-14:~# crontab –ir

4、命令引數

-u user:用來設定某個使用者的crontab服務;
file:file是命令檔案的名字,表示將file做為crontab的任務列表檔案並載入crontab。如果在命令列中沒有指定這個檔案,crontab命令將接受標準輸入(鍵盤)上鍵入的命令,並將它們載入crontab。
-e:編輯某個使用者的crontab檔案內容。如果不指定使用者,則表示編輯當前使用者的crontab檔案。
-l:顯示某個使用者的crontab檔案內容,如果不指定使用者,則表示顯示當前使用者的crontab檔案內容。
-r:從/var/spool/cron目錄中刪除某個使用者的crontab檔案,如果不指定使用者,則預設刪除當前使用者的crontab檔案。
-i:在刪除使用者的crontab檔案時給確認提示。

四、用Crontab計劃任務

除了通過組態檔來處理計劃cron作業之外,還有別的方法可以做到。如果你檢視/etc目錄,你會發現有這樣的目錄:cron.daily、cron.hourly、cron.monthly等等。因此,把cron指令碼放入這些目錄中,那麼系統會根據這些目錄名定時執行這些作業指令碼的。

1、Cron設定型別

Cron有兩種組態檔型別,用於排程自動化任務。

1)系統級Crontab
這些cron作業被系統服務和關鍵作業所使用,且需要root級的許可權才能執行。可以在/etc/crontab檔案中檢視系統級的cron作業。

2)使用者級Crontab
使用者級的cron作業是針對每個使用者單獨分開的。因此每個使用者都可以使用crontab命令建立自己的cron作業,還可以使用以下命令編輯或檢視自己的cron作業。

root@ubuntu-14:~# crontab –e


選擇編輯器後,你可以設定新cron作業了。

五、用Crontab排程作業

可以使用指定的語法排程cron作業,而且還有速記縮寫命令,使的管理cron作業很簡單。
Crontab語法如下:

* * * * * command to be executed
- - - - - -
| | | | | |
| | | | | --- 預執行的命令
| | | | ----- 表示星期0~7(其中星期天可以用0或7表示)
| | | ------- 表示月份1~12
| | --------- 表示日期1~31
| ----------- 表示小時1~23(0表示0點)
------------- 表示分鐘1~59 每分鐘用*或者 */1表示

六、新Cron作業設定範例

現在你已經熟悉了crontab命令、語法及cron作業的型別,現在可以建立一些作業計劃進行測試。可以使用crontab –e 命令新增。

1、每分鐘執行的計劃作業

下面的例子,建立一個cron作業,它每分鐘輸出文字“test cron job to execute every minute”並把文字傳送到user@vexxhost.com郵箱。
首先用crontab命令編輯

root@ubuntu-14:~# crontab –e

寫入以下的指令碼

SHELL=/bin/bash
HOME=/
MAILTO=”user@vexxhost.com”
#This is a comment
* * * * * echo 'test cron job to execute every minute'
:wq!    儲存並退出


一旦儲存了此cron指令碼檔案,就可以把它新增到計劃的作業中。

2、在指定時間排程Cron job作業

假如想排程某個cron作業,讓它在“每個星期四的下午7:00”執行,那麼crontab指令碼應該這樣:

00 19 * * 4 sh /root/test.sh

再把它新增到排程作業中。

root@ubuntu-14:~# crontab -e
crontab: installing new crontab

上面指令碼中的“00 19”指的是下午7點,“4”指的是星期四。

七、總結

可以看到,用crontab實現自動化任務是很容易的,而且它可以按分鐘、小時、周、月、星期來執行任務。除此之外,Linux還有一個at命令,它適用於處理只執行一次的任務,且需要先執行atd服務。
其次要注意環境變數的問題。有時我們建立了一個crontab,但是這個任務卻無法自動執行,而手動執行這個任務卻沒有問題,這種情況一般是由於在crontab檔案中沒有設定環境變數引起的。在crontab檔案中定義多個排程任務時,需要特別注環境變數的設定,因為我們手動執行某個任務時,是在當前shell環境下進行的,程式當然能找到環境變數,而系統自動執行任務排程時,是不會載入任何環境變數的,因此,就需要在crontab檔案中指定任務執行所需的所有環境變數,這樣,系統執行任務排程時就沒有問題了。
還要注意清理系統使用者的郵件紀錄檔。每條任務排程執行完畢,系統都會將任務輸出資訊通過電子郵件的形式傳送給當前系統使用者,這樣日積月累,紀錄檔資訊會非常大,可能會影響系統的正常執行,因此,將每條任務進行重定向處理非常重要。
最後要注意,新建立的cron作業,不會馬上執行,至少要過2分鐘才執行。如果重新啟動cron服務則會馬上執行。

Linux中利用crontab建立計劃任務 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-06/86401.htm

Linux中用crontab例行工作安排 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-06/85441.htm

Linux crontab不執行問題排查 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-06/85432.htm

Ubuntu使用crontab定時任務 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-05/84770.htm

Linux計劃任務(at batch crontab anacron) http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-03/81584.htm 


IT145.com E-mail:sddin#qq.com