1. 程式人生 > >使用crontab設置定時任務

使用crontab設置定時任務

輸出 配置文件 ref 調用 如果 monthly div tar 命令

配置文件

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設置定時任務