crontab定時任務

Linux中執行定時任務,一般是經過crond這個守護進程來完成的,用ps -ef | grep crond | grep -v grep能夠看到。它會從三個地方讀取配置文件來進行後臺任務的執行:html

  1. /var/spool/cron/${USER}
  2. /etc/crontab
  3. /etc/cron.d/*

這些配置文件記錄了命令行以及執行週期等信息。下面來分別看看這三種類型的配置文件:vim

/var/spool/cron/目錄下的配置

該目錄下新建一個文本文件,並以當前用戶名命名,好比當前是root帳戶登陸,則vim root,配置格式是這樣:* * * * * 命令bash

第一個 * 表明每小時中的第幾分鐘(0-59)
第二個 * 表明天天的第幾個小時(0-23)
第三個 * 表明每月中的第幾天(1-31)
第四個 * 表明每一年的第幾個月(1-12)
第五個 * 表明每週的星期幾(0-7,0和7都表明星期日)編輯器

特殊符號
,表明不連續的時間。好比0 8,12,16 * * *,就表明在天天的8點0分,12點0分,16點0分各執行一次。
-表明連續的時間範圍。好比0 5 * * 1-6,表明在週一到週六的凌晨5點0分執行命令
*/n表明每隔多久執行一次。好比*/10 * * * *,表明每隔10分鐘就執行一遍命令url

例:命令行

  • 45 22 * * * 命令 在22點45分執行命令
  • 0 17 * * 1 命令 每週1 的17點0分執行命令
  • 0 5 1,15 * * 命令 每個月1號和15號的凌晨5點0分執行命令
  • 40 4 * * 1-5 命令 每週一到週五的凌晨4點40分執行命令
  • */10 4 * * * 命令 天天的凌晨4點,每隔10分鐘執行一次命令
  • 0 0 1,15 * 1 命令 每個月1號和15號,每週1的0點0分都會執行命令。注意:星期幾和幾號最好不要同時出現,由於他們定義的都是天。很是容易讓管理員混亂。

案例
*/1 * * * * echo 'hello' >> /tmp/a.txt 每隔一分鐘向/tmp/a.txt中追加一行hello,可使用tail -f /tmp/a.txt觀察code

PS:使用 crontab -e效果等同於 vim /var/spool/cron/${USER}

/etc/crontab配置

這個文件負責安排由系統管理員制定的維護系統以及其餘任務的crontab。htm

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# 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

# run-parts
00 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
44 4 1 * * root run-parts /etc/cron.monthly

MAILTO=root是說,當 /etc/crontab 這個檔案中的例行性命令發生錯誤時,會將錯誤訊息或者是屏幕顯示的訊息傳給誰。blog

00 * * * * root run-parts /etc/cron.hourly:在 #run-parts 以後的命令,能夠看到,五個佔位符後面接的是root,表明以root身份執行。而run-parts表明後面接的/etc/cron.hourly是該目錄內(/etc/cron.hourly)的全部可執行文件,也就是說,每一個小時的00分,系統會以root身份去/etc/cron.hourly這個目錄下執行全部可執行的文件,後面三行也是相似的意思。能夠將天天須要執行的命令直接寫到/etc/cron.daily便可,這樣能夠不使用crontab -e。進程

/etc/cron.d/目錄下的配置

該目錄用來存聽任何要執行的crontab文件或腳本。

權限

查看/etc目錄下有沒有cron.allow或cron.deny文件,做用以下:

  1. 若是兩個文件都不存在,則只有root用戶才能使用crontab命令。
  2. 若是cron.allow存在但cron.deny不存在,則只有列在cron.allow文件裏的用戶才能使用crontab命令,若是root用戶也不在裏面,則root用戶也不能使用crontab。
  3. 若是cron.allow不存在, cron.deny存在,則只有列在cron.deny文件裏面的用戶不能使用crontab命令,其它用戶都能使用。
  4. 若是兩個文件都存在,則列在cron.allow文件中並且沒有列在cron.deny中的用戶可使用crontab,若是兩個文件中都有同一個用戶,以cron.allow文件裏面是否有該用戶爲準,若是cron.allow中有該用戶,則可使用crontab命令。

crontab用法

crontab命令用於安裝、刪除或者列出用於驅動cron後臺進程的表格。用戶把須要執行的命令序列放到crontab文件中以得到執行。

  • -l 在標準輸出上顯示當前的crontab。
  • -r 刪除當前的crontab文件。
  • -e 使用VISUAL或者EDITOR環境變量所指的編輯器編輯當前的crontab文件。當結束編輯離開時,編輯後的文件將自動安裝。

參考

Linux下的crontab定時執行任務命令詳解

相關文章
相關標籤/搜索