crontab 命令
用途
提交、編輯、列出或除去 cron 作業。
語法
crontab [ -e [UserName] | -l [UserName] | -r [UserName] | -v [UserName] | File ]
描述
這個 crontab 命令提交、編輯、列出或除去 cron 作業。一個 cron 作業是一個命令,其運行是由 cron 守護進程在規則的調度間隔執行的。要提交一個 cron 作業,指定 crontab 命令用 -e 標志。crontab 命令調用一個編輯會話,允許創建一個 crontab 文件。在這個文件中,為每個 cron 創建條目。每個條目必須是一種 cron 守護進程可接受的格式。要得到創建條目的信息,參閱 crontab 文件條目格式。
當創建完條目和退出文件後,crontab 命令將它拷貝到 /var/spool/cron/crontabs 目錄,並把它放到一個文件中,此文件的名稱是當前的用戶名。如果以用戶名命名的文件已存在於 crontabs 目錄中,crontab 命令會覆蓋它。
同樣的,可以通過指定文件參數創建 crontab 文件。如果此文件已經存在,格式必須是 cron 守護進程所需要的。如果文件不存在,crontab 命令就調用編輯器。如果 EDITOR 環境變量存在,此命令就調用它指定的編輯器。否則,crontab 命令調用 vi 編輯器。
要列出 crontab 文件的內容,就指定 crontab 命令並采用 -l 標志。要除去存在的文件,采用 -r 標志。
可選的 UserName 參數可被 crontab 文件的所有者或者 root 用戶來使用,為指定的用戶編輯、列出、除去或驗證 cron 作業的狀態。如果 UserName 是無效的,就會產生錯誤消息並退出程序。
如果可選的 UserName 參數沒有被指定,這個crontab 標志對於 root 用戶和當前用戶可用。
安全性
只有 root 用戶和 crontab 文件的所有者可以在 -e、-l、-r 和 -v 標志後面使用 UserName 以編輯、列出、除去或驗證指定用戶的 crontab 文件。
cron 守護進程
這個 cron 守護進程運行的命令和 crontab 文件條目是相對應的。如果不重新定向 cron 作業的輸出為標准輸出或標准錯誤,cron 守護進程就會通過電子郵件告知您任何命令輸出或錯誤。如果在 crontab 文件中指定了不正確的 cron 作業,這個cron 守護進程不運行這個作業。
cron 守護進程只在 cron 守護進程被初始化時檢查 crontab 文件。當用 crontab 命令改變 crontab 文件時,指示變化的消息被發送到 cron 守護進程。這消除了在規則的調度間隔檢查新的或改變的文件的開銷。
控制使用 crontab 命令
/var/adm/cron/cron.allow 和 /var/adm/cron/cron.deny 文件控制哪一個用戶可以使用 crontab 命令。root 用戶可以創建、編輯或刪除這些文件。這些文件的條目是用戶登錄名稱,每個名稱占一行。如果登錄標識和多個的登錄名稱相關聯,這個crontab 命令采用第一個在 /etc/passwd 文件中的登錄名稱,而不管當前實際使用哪一個登錄名稱。而且,要允許用戶啟動 cron 作業,應該使用 chuser 命令將 /etc/security/user 文件中的守護進程屬性設置為 TRUE。
以下關於 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 文件條目格式
一個 crontab 文件包含每個 cron 作業的條目。條目由換行字符分開。每個 crontab 文件條目包括 6 個字段,它們被空格或制表符以以下格式分開:
minute hour day_of_month month weekday command這些字段接收以下值:
minute 0 到 59
hour 0 到 23
day_of_month 1 到 31
month 1 到 12
weekday 0 到 6(星期天到星期六)
command shell 命令
必須為每個字段指定一個值。除了 command 字段,這些字段可以包含以下內容:
指定范圍內的一個數。要在 5 月運行一個命令,在 月 字段指定 5。
兩個被破折號分開的數目表明了包含的范圍。要從星期二到星期五運行 cron 作業,把 2-5 放到 weekday 字段中。
由逗號隔開的數字列表。要在一月第一天和最後一天的運行命令,在日_of_月 字段中可指定 1,31。
* (星號),意味著所有的允許值。要每個小時運行一個作業,在小時字段指定一個星號。
注: 任一字符前如有一個反斜槓符號(包括 %)會引起字符被字面上的處理。天的規范是由兩個字段(月的天和星期的天)組成的。如果指定兩者都為元素的一個列表,這兩個字段均被包含在其中。例如,如下條目:
0 0 1,15 * 1 command將在每個月的第一天和第十五天運行 command,還有每個星期一。要僅在一個字段中指定天,另一字段應包含 * 。
指定命令
這個 cron 守護進程運行命名於所選日期和時間的第六個字段中的字段。如果包含一個 % (百分號)在第六字段,cron 守護進程像命令調用一樣處理所有的任務,並使所有的後續任務在標准輸入上可用,除非轉義百分號 (\%)。空行和第一個非空字符是編號標記(#)將被忽略。如果命令含有反斜槓 (\) 的參數,反斜槓前應加另一個反斜槓。
注:
shell 只運行該命令字段的第一行。所有其它的行作為標准的輸入對於命令可用。
cron 守護進程從 HOME 目錄中啟動一個子 shell。如果調度一個命令運行,這時您尚未登錄,並且希望在.profile 文件中的命令運行,這個命令必須明確的讀取您的 .profile 文件。
cron 守護進程為每個 shell 提供了一個缺省的環境,定義了 HOME, LOGNAME, SHELL (=/usr/bin/sh) 和 PATH (=/usr/bin)。
標志
-e UserName 編輯用戶的 crontab 文件的拷貝,或者,如果一個有效的 UserName 的 crontab 文件不存在則創建一個空的文件進行編輯。當編輯完成後,文件被拷貝到 crontab 目錄作為用戶的crontab 文件。
-l UserName 列出用戶的 crontab 文件。
-r UserName 從 crontab 目錄除去用戶的 crontab 文件。
-v UserName 列出用戶 cron 作業的狀態。
安全性
審計事件:如果審計子系統已經被正確的配置和啟用,crontab 守護進程就會當每次執行命令時產生以下審計記錄(或事件):
事件 信息
CRON_JobRemove 列出哪一個用戶除去了 cron 作業和除去的時間。
CRON_JobAdd 列出哪一個用戶添加了 cron 作業和添加的時間。
安全性
審計事件:如果審計子系統已經被正確的配置和啟用,crontab 守護進程就會當每次執行命令時產生以下審計記錄(或事件):
事件 信息
CRON_JobRemove 列出哪一個用戶除去了 cron 作業和除去的時間。
CRON_JobAdd 列出哪一個用戶添加了 cron 作業和添加的時間。
請參閱《AIX 5L V5.2 安全指南》中的『設置審計』以獲取關於如何適當地選擇和分組審計事件及如何配置審計事件數據集合的詳細信息。
退出狀態
此命令返回以下退出值:
0 成功完成。
>0 發生錯誤。
示例
拷貝一個名為 mycronjobs 的文件,到 /var/admn/cron/crontabs 目錄下,輸入以下內容:
crontab mycronjobs將時間以小時的形式把每個小時寫到 console 中,輸入:
0 * * * * echo The hour is `date` 。
>/dev/console要在每個星期一、星期三和星期五的 6:30 a.m. 運行 calendar 命令,輸入:
30 6 * * 1,3,5 /usr/bin/calendar要在一年的每一天的 6:30 運行 calendar 命令,輸入:
30 6 * * * /usr/bin/calendar要在八月的每天午夜運行一個稱為 maintenance 的腳本,輸入:
0 0 * 8 * /u/harry/bin/maintenance為命令的標准輸入定義文本,輸入:
0 16 * 12 5 /usr/sbin/wall%HAPPY HOLIDAY!%Remember to
turn in your time card.在 %(百分號)之後定義 wall 命令的標准輸入的文本:
HAPPY HOLIDAY!
Remember to turn in your time card.文件
/var/adm/cron/FIFO 當新的作業的提交是由 crontab 或 at 命令完成時,一個發送消息到 cron 守護進程的命名管道。
/var/spool/cron/crontabs 指定 crontab 緩沖池區域。
/var/adm/cron/cron.allow 指定用戶列表,這些用戶被允許訪問 crontab 命令。
/var/adm/cron/cron.deny 指定用戶列表,這些用戶不被允許訪問 crontab 命令。