Linux定時執行運行腳本

原文鏈接: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文件,並寫入了輸入的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章