首頁 > 軟體

Linux的cron定時任務使用說明

2020-06-16 17:24:27

直接使用 crontab -e 命令,進入到編輯器

然後輸入 crontab指令

crontab用法

crontab –e : 修改 crontab 檔案,如果檔案不存在會自動建立。

crontab –l : 顯示 crontab 檔案。

crontab -r : 刪除 crontab 檔案。

crontab -ir : 刪除 crontab 檔案前提醒使用者。

在crontab檔案中寫入需要執行的命令和時間,該檔案中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。每個域之間使用空格或者製表符分隔。格式如下:

minute hour day-of-month month-of-year day-of-week commands

合法值為:00-59 00-23 01-31 01-12 0-6 (0 is sunday)

除了數位還有幾個特殊的符號:"*"、"/"和"-"、","

*代表所有的取值範圍內的數位

"/"代表每的意思,"/5"表示每5個單位,例如每分鐘執行一次命令: */1 * * * * /home/linrui/XXXX.sh

"-"代表從某個數位到某個數位

","分開幾個離散的數位

例如:

15,30,45,59 * * * * echo "xgmtest....."    表示,每隔15分鐘,執行一次列印命令

1、在 凌晨00:01執行

1 0 * * * /home/linrui/XXXX.sh

2、每個工作日23:59都進行備份作業。

59 11 * * 1,2,3,4,5 /home/linrui/XXXX.sh

或者如下寫法:

59 11 * * 1-5 /home/linrui/XXXX.sh

3、每分鐘執行一次命令

*/1 * * * * /home/linrui/XXXX.sh

4、每個月的1號 14:10 執行

10 14 1 * * /home/linrui/XXXX.sh

今天做了個資料庫的備份指令碼,順便系統得學習一下Linux下定時執行指令碼的設定。關鍵是要記住/var/spool/cron這個目錄。下面看一下具體的用法:

首先檢視一下/etc/crontab檔案:

$ cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

前四行是有關設定cron任務執行的環境變數。SHELL變數的值指定系統使用的SHELL環境(該樣例為bash shell),PATH變數定義了執行命令的路徑。Cron的輸出以電子郵件的形式發給MAILTO變數定義的使用者名稱。如果MAILTO變數定義為空字串(MAILTO=""),電子郵件不會被傳送。執行命令或指令碼時HOME變數可用來設定基目錄。

檔案/etc/crontab中每行任務的描述格式如下:

minute hour day month dayofweek command

minute - 從0到59的整數

hour - 從0到23的整數

day - 從1到31的整數 (必須是指定月份的有效日期)

month - 從1到12的整數 (或如Jan或Feb簡寫的月份)

dayofweek - 從0到7的整數,0或7用來描述周日 (或用Sun或Mon簡寫來表示)

command - 需要執行的命令(可用as ls /proc >> /tmp/proc或 執行自定義指令碼的命令)

root表示以root使用者身份來執行

run-parts表示後面跟著的是一個資料夾,要執行的是該資料夾下的所有指令碼

對於以上各語句,星號(*)表示所有可用的值。例如*在指代month時表示每月執行(需要符合其他限制條件)該命令。

整數間的連字號(-)表示整數列,例如1-4意思是整數1,2,3,4

指定數值由逗號分開。如:3,4,6,8表示這四個指定整數。

符號“/”指定步進設定。“/”表示步進值。如0-59/2定義每兩分鐘執行一次。步進值也可用星號表示。如*/3用來執行每三個月份執行指定任務。

以“#”開頭的為註釋行,不會被執行。

如果一個cron任務需要定期而不是按小時,天,周,月來執行,則需要新增/etc/cron.d目錄。這個目錄下的所有檔案和檔案/etc/crontab語法相同,檢視樣例:

# record the memory usage of the system every monday

# at 3:30AM in the file /tmp/meminfo

30 3 * * mon cat /proc/meminfo >> /tmp/meminfo

# run custom scrīpt the first day of every month at 4:10AM

10 4 1 * * /root/scrīpts/backup.sh

除了root使用者之外的使用者可以執行crontab設定計劃任務。所有使用者定義的crontab儲存在目錄/var/spool/cron下,任務會以建立者的身份被執行。要以特定使用者建立一個crontab,先以該使用者登入,執行命令crontab -e,系統會啟動在VISUAL或者EDITOR中指定的的編輯軟體編輯crontab。檔案內容與/etc/crontab格式相同。範例如下:

0 3 * * * /home/dbbackup/db1backup.sh backup

0 4 * * * /home/dbbackup/db2backup.sh backup

表示每天3點執行/home/dbbackup/db1backup.sh backup,4點執行/home/dbbackup/db2backup.sh backup,如果是每五分鐘執行一次可改為:

*/5 * * * * /home/dbbackup/db2backup.sh backup

當更改的crontab需要儲存時,檔案會儲存在成如下檔案/var/spool/cron/username。檔名會根據使用者名稱而不同。

cron服務會每分鐘檢查一次/etc/crontab、/etc/cron.d/、/var/spool/cron檔案下的變更。如果發現變化,就會下載到記憶體中。因此,即使crontab檔案改變了,程式也不需要重新啟動。推薦自定義的任務使用crontab -e命令新增,退出後用/etc/init.d/crond restart命令重新啟動crond進程,官方檔案說不用重新啟動進程,但我遇到不重新啟動無法執行任務的情況。開始不知道/etc/crontab檔案中的run-parts是什麼意思,直接把命令按照/etc/crontab的格式加上總是無法執行,後來才知道run-parts是指後面跟著的是資料夾。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-12/138992.htm


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