Linux定時任務

關于crontab

cron是一個Linux定時執(zhí)行工具,可以在無需人工干預的情況下運行作業(yè)。
在Ubuntu server 下,cron是被默認安裝并啟動的。

Ubuntu 通過調用 run-parts 命令,定時運行四個目錄下的所有腳本。

  1. /etc/cron.hourly,目錄下的腳本會每個小時讓執(zhí)行一次,在每小時的2分鐘時運行;
  2. /etc/cron.daily,目錄下的腳本會每天讓執(zhí)行一次,在每天0點17分時運行;
  3. /etc/cron.weekly,目錄下的腳本會每周讓執(zhí)行一次,在每周第七天的3點56分時運行;
  4. /etc/cron.mouthly,目錄下的腳本會每月讓執(zhí)行一次,在每月19號的5點32分時運行;

當然,以上的時間均是系統(tǒng)默認時間,可以根據自己的需求進行修改。

cron 服務的啟動與停止

Ubuntu 下啟動,停止與重啟cron,均是通過調用/etc/init.d/中的腳本進行。命令如下:

$ sudo service cron start  # 啟動服務
$ sudo service cron stop # 關閉服務
$ sudo service cron restart # 重啟服務
$ sudo service cron reload # 重新載入配置

可以通過以下命令查看cron是否在運行(如果在運行,則會返回/一個進程ID):

$ pgrep cron
# 返回一個進程ID  則表示正在運行

crontab命令

crontab 命令用于安裝、刪除或者列出用于驅動cron后臺進程的表格。

也就是說,用戶把需要執(zhí)行的命令序列放到crontab文件中以獲得執(zhí)行。

每個用戶都可以有自己的crontab文件。以下是這個命令的一些參數與說明:

$ crontab -u #設定某個用戶的cron服務
$ crontab -l #列出某個用戶cron服務的詳細內容
$ crontab -r #刪除某個用戶的cron服務
$ crontab -e #編輯某個用戶的cron服務

/etc/crontab文件語法如下

Minute Hour Day Month Dayofweek command

Minute:分鐘(0-59),表示每個小時的第幾分鐘執(zhí)行該任務
Hour: 小時(1-23),表示每天的第幾個小時執(zhí)行該任務
Day: 日期(1-31),表示每月的第幾天執(zhí)行該任務
Month: 月份(1-12),表示每年的第幾個月執(zhí)行該任務
DayOfWeek: 星期(0-6,0代表星期天),表示每周的第幾天執(zhí)行該任務
Command: 指定要執(zhí)行的命令(如果要執(zhí)行的命令太多,可以把這些命令寫到一個腳本里面,然后在這里直接調用這個腳本就可以了,調用的時候記得寫出命令的完整路徑)

在這些字段里,除了Command是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對于不指定的字段,要用*來填補其位置

*:代表所有的取值范圍內的數字;
/:代表”每”(“*/5”,表示每5個單位);
-:代表從某個數字到某個數字(“1-4”,表示1-4個單位);
,:分開幾個離散的數字;

舉例如下:

$ 5 * * * * ls #指定每小時的第5分鐘執(zhí)行一次ls命令
$ 30 5 * * * ls #指定每天的 5:30 執(zhí)行l(wèi)s命令
$ 30 7 8 * * ls #指定每月8號的7:30分執(zhí)行l(wèi)s命令

新增 cron 任務

$ crontab -e   # 新增一個腳本任務。會出現(xiàn)  1-4 中編輯器供選擇

# 編輯好定時任務命令

$ sudo service cron restart  # 重啟cron

指定用戶執(zhí)行定時任務

很多時候,執(zhí)行定時任務時,需要指定特定的用戶。
當指定用戶來執(zhí)行定時任務的時候,需要去編輯/etc/crontab文件來實現(xiàn)。

/etc/crontab文件crontab -e命令區(qū)別

  1. 命令格式不同 crontab -e 無法指定用戶
    /etc/crontab格式: * * * * * user-name command to be executed
    crontab -e格式: * * * * * command

  2. 使用范圍不同
    /etc/crontab這種方法只有root用戶能用
    crontab -e這種所有用戶都可以使用

  3. 重啟服務不同
    /etc/crontab方式:/etc/init.d/cron restart
    crontab -e方式:service cron restart

舉例如下:

$ */3 * * * * root command    # 每三分鐘,以root身份執(zhí)行任務
$ # 建立一個/root/runcron目錄,將每隔5分鐘執(zhí)行一次的可執(zhí)行文件都寫到該目錄下,
$ # 就可以讓系統(tǒng)每5分鐘執(zhí)行一次該目錄下的所有可執(zhí)行文件.
$ # run-parts  命令 會搜索目錄內所有可執(zhí)行文件,并執(zhí)行
$ */5 * * * * root run-parts /root/runcron  

$ # 可以將  ‘時’ 使用逗號分隔,實現(xiàn)每五分鐘執(zhí)行命令的效果。
$ 1,6,11,16,21,26,31,36,41,46,51,56 * * * * root …………   # 省略號代表命令
$ # 使用這種方式,比  ' */5 '  方式優(yōu)勢在于,不會講所有命令都在同一個時間點執(zhí)行,
$ # 防止在某個時段,系統(tǒng)會非常的繁忙
$ 2,7,12,17,22,27,32,37,42,47,52,57 * * * * root …………  # 省略號代表命令
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容