關于crontab
cron是一個Linux定時執(zhí)行工具,可以在無需人工干預的情況下運行作業(yè)。
在Ubuntu server 下,cron是被默認安裝并啟動的。
Ubuntu 通過調用 run-parts 命令,定時運行四個目錄下的所有腳本。
- /etc/cron.hourly,目錄下的腳本會每個小時讓執(zhí)行一次,在每小時的2分鐘時運行;
- /etc/cron.daily,目錄下的腳本會每天讓執(zhí)行一次,在每天0點17分時運行;
- /etc/cron.weekly,目錄下的腳本會每周讓執(zhí)行一次,在每周第七天的3點56分時運行;
- /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文件語法如下
MinuteHourDayMonthDayofweekcommand
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ū)別
命令格式不同 crontab -e 無法指定用戶
/etc/crontab格式:* * * * * user-name command to be executed
crontab -e格式:* * * * * command使用范圍不同
/etc/crontab這種方法只有root用戶能用
crontab -e這種所有用戶都可以使用重啟服務不同
/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 ………… # 省略號代表命令