生產環境下的cron寫法

2021-09-21 15:21:51 字數 4398 閱讀 5343

cron這個單詞

**於希臘單詞

chronos(

意為「時間」),是

linux

系統下乙個自動執行指定任務

的程式。例如,你想在每晚睡覺期間建立某些檔案或資料夾的備份,就可以用

cron

來自動執行。很多朋友有時經常在問:為什麼我寫的

cron

計畫列表不能執行了?其實最

常見的乙個問題往往是因為環境變數不對。經常會看到論壇裡有人問:為什麼我的

cron

計畫任務建立了不執行

? 準備建立一條計畫任務的時候,很多人都喜歡在命令列

下執行一遍,因為這個時候環境變數是隨著

shell

自動帶進來,在

cron

中則可能因為找

不到正確的環境變數,任務就不能執行。

cron

服務的啟動和停止

cron

服務是l

inux

的內建服務,但它不會開機自動啟動。可以用以下命令啟動和開機自動啟動:

12

service crond start

chkconfig crond on

cron

的命令語法:

cron

把命令列儲存在

/etc/crontab

檔案裡,每個系統使用者都可以有自己的

crontab(

在/var/spool/cron/下)

。要檢視當前使用者的

crontab

,輸入crontab -l

;要編輯

crontab

,輸入crontab -e

;要刪除

crontab

,輸入crontab -r

。如當前是

root

身份,要檢視/編輯

/刪除/某使用者的

crontab

,只需在相應的命令後加上

-u username(

如crontab -e -u username)

即可。cron

服務每分鐘不僅要讀一次

/var/spool/cron

目錄內的所有檔案,還需要讀一次

/etc/crontab 

檔案。配置這個檔案也能讓

cron

執行任務。使用

crontab

命令是對使用者級任務的配置,而編輯

/etc/crontab

檔案是對系統級任務的配置。我們一般在工作中是編輯

/etc/crontab

檔案,然後在裡面新增計畫任務,其字段有

7處,如下所示:

字段說明1 

分鐘(0-59)

2 小時(2-24)

3 日期(1-31)

4 月份(1-12

;或英文縮寫

jan、

feb等)

5 週幾(0-6,0

為週日;或單詞縮寫

sun、

mon等)

6 使用者名稱(

執行命令時以此使用者的身份)

7 要執行的命令(路徑

) 下面以實際案例來舉例說明

cron

的用法:

112 3 * * * roottarczf/usr/local/backups/daily/etc.tar.gz/etc>>/dev/null2>&1

這條語句將在每天的凌晨3點

12分(03:12)

執行tar czf /usr/local/backups/daily/etc.tar.gz /etc 

命令,>>/dev/null 2>&1 

表示把所有標準輸出傳送到

/dev/null(linux

的**站

),把標準錯誤輸出

(2)傳送到和標準輸出

(1)同樣的地方(即

/dev/null)

,執行這行命令將不會產生任何輸出。

這條語句可以變得稍微複雜一點:

130 15 13 6 1 * roottarczf/usr/local/backups/daily/etc.tar.gz/etc>>/dev/null2>&1

它將在6月13

日周一的

15:30

執行tar czf /usr/local/backups/daily/etc.tar.gz  /etc 

命令。

以下語句可以達到同樣的效果:

130 15 13 jun mon * roottarczf/usr/local/backups/daily/etc.tar.gz/etc>>/dev/null2>&1

如果你想以使用者

joey

的身份每小時的第

15分鐘執行某個程式,可以使用:

115 * * * * joey/usr/bin/somecommand>>/dev/null2>&1

其中的星號

(*)是萬用字元,表示

cron

將忽略這個字段。

如果你想每兩小時就執行某個程式,可以在小時欄位裡使用

*/2。它將會在2點、

4點、6

點…24

點執行。具體語句如下:

10 */2* * * joey/usr/bin/somecommand>>/dev/null2>&1

cron

語句中還可以使用逗號

(,)來指定多個時間。例如你想在每小時的

15分和

30分執行

某個程式,可以在分鐘字段使用

15,30:

1

15,30 * * * * joey/usr/bin/somecommand>>/dev/null2>&1

如果你想在每月的第一周(即

1號到7號

)每天的指定時間執行某個程式,可以在日期字

段使用1-7:

115,30 */21-7 * * joey/usr/bin/somecommand>>/dev/null2>&1

這條語句將在每月的第

1-7日每兩小時的

15分和30分

(02:15

、02:30…22:30等)

執行/usr/bin/somecommand 

命令。

如果你想在每天的

16:18

執行乙個指令碼集合,可以把所有要執行的指令碼放到乙個目錄中(如

/home/username/cron)

,可以使用:

118 16 * * * root run-parts/home/username/cron>>/dev/null2>&1

注:系統維護中必須使用的乙個技巧

每條計畫任務執行完畢之後,系統會自動將輸出傳送郵件給當前系統使用者。郵件日積月累,非常的多,甚至會撐爆整個系統。所以每條計畫任務命令後面進行重定向處理是非常必要的 

>>/dev/null 2>&1 

,其前提是對計畫中的命令需要正常輸出已經作了一定的處理

, 比如追加到某個特定日誌檔案。另外,如果你想儲存某個程式的輸出結果,可以把》/dev/null 2>&1替換為》某檔案2>&1即可。

生產環境下的cron寫法

cron這個單詞 於希臘單詞 chronos 意為 時間 是 linux 系統下乙個自動執行指定任務 的程式。例如,你想在每晚睡覺期間建立某些檔案或資料夾的備份,就可以用 cron 來自動執行。很多朋友有時經常在問 為什麼我寫的 cron 計畫列表不能執行了?其實最 常見的乙個問題往往是因為環境變數...

生產環境下的log 在正式環境下隱藏log

vue 安裝 babel plugin transform remove console module.exports transform remove console 加入這行 此方法不分正式還是生產 log輸出均不生效 專案發布階段需要用到的babel外掛程式 const prodplugins...

生產環境下的錯誤日誌記錄

display errors 錯誤回顯,一般常用語開發模式,但是很多應用在正式環境中也忘記了關閉此選項。錯誤回顯可以暴露出非常多的敏感資訊,為攻擊者下一步攻擊提供便利。推薦關閉此選項。display errors on 開啟狀態下,若出現錯誤,則報錯,出現錯誤提示 dispaly errors of...