原文鏈接:Linux定時執行任務Crontab
Linux 定時執行shell腳本命令crontab
crontab可以在指定的時間執行一個shell腳本以及執行一系列Linux命令
/etc的cron
在/etc目錄下,/etc目錄主要用來存放系統中的配置文件,基本上所有的配置文件都可以在這裏找到。運行以下命令:
ls /etc/cron*
這個命令會列出/etc目錄下所有以cron開頭的文件和文件夾。可以看到主要有以下文件夾:
/etc/cron.hourly 這裏存放了每小時需要運行的腳本
/etc/cron.daily 這裏存放了每天需要運行的腳本
/etc/cron.weekly 這裏存放了每個星期需要運行的腳本
/etc/cron.monthly 這裏存放了每月需要運行的腳本
/etc/cron.d 如果既不是按小時,也不按天,周和月來運行,就放在這個文件夾
可以把我們需要定時運行的腳本放到對應的文件夾中,系統就會定時運行對應的腳本了。那麼系統是怎麼做到的呢?
在/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
crontab文件是一個系統級別的配置文件,裏面配置了什麼時候去運行什麼文件的規則。Linux會定期去掃描對應的文件夾,運行裏面的腳本。這就完成了定時執行任務的功能。
cron服務
cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。由於cron 是Linux的內置服務,但它不自動起來,可以用以下的方法啓動、關閉這個服務:
crontab –e //修改 crontab 文件,如果文件不存在會自動創建。
crontab –l //顯示 crontab 文件。
crontab -r //刪除 crontab 文件。
crontab -ir //刪除 crontab 文件前提醒用戶。
service crond status //查看crontab服務狀態
service crond start //啓動服務
service crond stop //關閉服務
service crond restart //重啓服務
service crond reload //重新載入配置
cron命令每分鐘會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。而Linux任務調度的工作主要分爲以下兩類:
- 系統執行的工作:系統週期性所要執行的工作,如備份系統數據、清理緩存;
- 個人執行的工作:某個用戶定期要做的工作,例如每天備份數據庫等。
在/var/spool/cron/目錄下是所有用戶的crontab文件,你也可以去看看。上面說到的/etc下的配置都是屬於系統級別的,那麼個人級別的定時執行如何來做呢?這就需要說到下面的crontab命令了。
crontab命令
cron服務提供crontab命令來設定cron服務的,以下是這個命令的一些參數與說明:
crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab -l //列出某個用戶cron服務的詳細內容
crontab -r //刪除某個用戶的cron服務
crontab -e //編輯某個用戶的cron服務
如果不指定用戶,就是當前系統的登陸用戶。
當你輸入命令:crontab -e時,就會出現一個文件,讓你填寫對應的定時規則
定時規則
以下是 crontab 文件的格式:
# .---------------- 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
分 時 日 月 周 用戶名[可省] 命令
{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–6;週日是0。
除了數字還有以下幾個特殊的符號需要特殊說明:
*:代表所有的取值範圍內的數字;
/:代表每的意思,”*/5″表示每5個單位;
-:代表從某個數字到某個數字;
,:分開幾個離散的數字。
以下舉幾個例子說明問題:
每五分鐘執行 */5 * * * * /home/jelly/test.sh
每小時執行 0 * * * * /home/jelly/test.sh
每天執行 0 0 * * * /home/jelly/test.sh
每週執行 0 0 * * 0 /home/jelly/test.sh
每月執行 0 0 1 * * /home/jelly/test.sh
每年執行 0 0 1 1 * /home/jelly/test.sh
每天早上6點 0 6 * * * /home/jelly/test.sh
每兩個小時 0 */2 * * * /home/jelly/test.sh
晚上11點到早上8點之間每兩個小時
0 23-7/2 * * * /home/jelly/test.sh
1月1日早上4點
0 4 1 1 * /home/jelly/test.sh
例子
先準備以下這麼一段簡短的腳本:
#!/bin/bash
var="its OK"
echo $var
exit 0
保存爲short.sh,並加入可執行權限:
chmod +x short.sh
在終端輸入以下命令:
crontab -e
在顯示的文件末尾添加以下規則:
*/1 * * * * /home/centos/shoort.sh >> /home/centos/short.log
編輯完成,保存完成以後,就會顯示以下提示信息:
crontab: installing new crontab
這就說明正在安裝新的定時任務,如果沒有這條提示信息,請重新運行crontab -e命令。
接下來就會看到在/home/centos目錄下會生成一個log.log文件,並寫入了輸入的信息。