使用crontab設置定時任務
配置文件
crontab主要的配置文件如下:
- /etc/crontab:系統cron表
- /etc/cron.d/*:保存由軟件包安裝腳本創建的cron文件的目錄
- /var/spool/cron/*:保存用戶創建的cron文件的目錄
- /etc/cron.allow:權限允許文件
- /etc/cron.deny:權限禁止文件
cron使用shell(/usr/bin/sh)從用戶的HOME目錄調用該命令。
cron為每個shell提供了一個默認環境:
HOME=<Users Home Dir> LOGNAME=<Users Login ID> PATH=/usr/bin:/usr/sbin:. SHELL=/usr/bin/sh
如果沒有設置相關的環境變量,會造成如$PATH問題導致的命令找不到。
可以在cron配置文件的頂部加上:
SHELL=/bin/bash
PATH=/usr/bin:/bin:/sbin:/usr/sbin
cron配置文件區別
cron的配置文件可在三個地方/etc/crontab
、/etc/cron.d/
、/var/spool/cron/crontabs/
。
/var/spool/cron/crontabs/
通過crontab命令來控制, 屬於用戶的, 所以這個命令設置了guid, 屬於crontab用戶組.
/etc/crontab
默認是控制/etc/cron.*, 如/etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly這些.
/etc/cron.d/
目錄下也是存放crontab的配置文件.
/etc/crontab
和/etc/cron.d/
在配置定時任務時,需要指定用戶是root,而/var/spool/cron/crontabs/已經是屬於用戶控制的, 所以不需要指定用戶, 這是格式上的區別.
權限控制文件
cron.allow的一個示例如下:
root
nick
dee
sarah
如果 cron.allow 文件存在,只有在文件中出現其登錄名稱的用戶可以使用 crontab 命令。root 用戶的登錄名必須出現在 cron.allow 文件中,如果這個文件存在的話。系統管理員可以明確的停止一個用戶,通過使用 crontab 命令,同時在 cron.deny 文件中列出用戶的登錄名。如果只有 cron.deny 文件存在,任一名稱沒有出現在這個文件中的用戶可以使用 crontab 命令。
如果以下一個條件成立,用戶將不能使用 crontab 命令:
- cron.allow 文件和 cron.deny 文件不存在(只允許 root 用戶)。
- cron.allow 文件存在,但用戶的登錄名未在其中列出。
- cron.deny 文件存在,且用戶登錄名已在其中列出。
如果 cron.allow 和 cron.deny 文件都不存在,只有被 root 用戶授權的人可以用 crontab 命令提交一個作業。
crontab命令
條目格式
minute hour day month weekday command
各位置的取值如下:
- minute: 表示分鐘,可以是從0到59之間的任何整數。
- hour:表示小時,可以是從0到23之間的任何整數。
- day:表示日期,可以是從1到31之間的任何整數。
- month:表示月份,可以是從1到12之間的任何整數。
- week:表示星期幾,可以是從0到7之間的任何整數,這裏的0或7代表星期日。
- command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。
在以上各個字段中,還可以使用以下特殊字符:
- 星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作。
- 逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整數之間的中杠表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
- 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。
常用命令
// 添加任務
crontab -e
// root用戶可以編輯其他用戶的任務
crontab -u suraer -e
// 添加文件的任務
crontab -u suraer suraer_cron.txt
// 刪除任務
crontab -r
// root用戶可以刪除其它用戶的任務
crontab -u suraer -r
// 列出任務
crontab -l
// root用戶查看其它用戶的任務
crontab -u suraer -r
// 開關cron服務
service crond start
service crond stop
默認cron任務會發送執行任務郵件到用戶帳號,如果不需要的話可以在任務行的最後面加上如下內容
>/dev/null 2>&1
可以將任務執行的信息輸出到一個文件作為日誌查看,如下示例:
10 10 * * * rm /home/ashish/tmp/* > /home/ashish/cronlogs/clean_tmp_dir.log
參考鏈接:
https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_71/com.ibm.aix.cmds1/crontab.htm
http://vlinux-freak.blogspot.jp/2010/12/working-with-crontab-scheduler.html
使用crontab設置定時任務