轉貼crontab 命令

orchidllh發表於2005-02-17

http://www16.boulder.ibm.com/pseries/zh_CN/cmds/aixcmds1/crontab.htm

以前有一臺linux的伺服器的crontab一直不執行,單獨呼叫crontab中的.sh是沒有問題的,執行時寫的log和err檔案的目錄也沒有問題,相同的crontab在其他伺服器上也可以正確的執行,讓我很是疑惑了很久。
在網上看到也有人遇到類似的問題,有人說是crontab設定好了需要reboot,還有人說是cron的程式需要重啟,應該不是這個問題吧,我在其他伺服器上設定的crontab,從來也沒有重啟過呀。在這篇文章中提到:

/var/adm/cron/cron.allow指定使用者列表,這些使用者被允許訪問 crontab 命令。
/var/adm/cron/cron.deny指定使用者列表,這些使用者不被允許訪問 crontab 命令。

但是這兩個檔案並不存在,在我的/var目錄下面就沒有adm目錄。
後來這臺伺服器因為其他問題重灌了,問題就解決了,哈哈哈,所以應該是作業系統安裝的問題吧。但是我仍然不知道是哪裡的問題。


用途

提交、編輯、列出或除去 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.allowcron.deny 檔案都不存在,只有被 root 使用者授權的人可以用 crontab 命令提交一個作業。

crontab 檔案條目格式

一個 crontab 檔案包含每個 cron 作業的條目。條目由換行字元分開。每個 crontab 檔案條目包括 6 個欄位,它們被空格或製表符以以下格式分開:

 
minute  hour  day_of_month  month  weekday  command

這些欄位接收以下值:

minute0 到 59
hour0 到 23
day_of_month1 到 31
month1 到 12
weekday0 到 6(星期天到星期六)
commandshell 命令

必須為每個欄位指定一個值。除了 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 檔案的拷貝,或者,如果一個有效的 UserNamecrontab 檔案不存在則建立一個空的檔案進行編輯。當編輯完成後,檔案被拷貝到 crontab 目錄作為使用者的crontab 檔案。
-l UserName列出使用者的 crontab 檔案。
-r UserNamecrontab 目錄除去使用者的 crontab 檔案。
-v UserName列出使用者 cron 作業的狀態。

安全性

審計事件:如果審計子系統已經被正確的配置和啟用,crontab 守護程式就會當每次執行命令時產生以下審計記錄(或事件):

事件資訊
CRON_JobRemove列出哪一個使用者除去了 cron 作業和除去的時間。
CRON_JobAdd列出哪一個使用者新增了 cron 作業和新增的時間。

請參閱《AIX 5L V5.2 安全指南》中的『設定審計』以獲取關於如何適當地選擇和分組審計事件及如何配置審計事件資料集合的詳細資訊。

退出狀態

此命令返回以下退出值:

0成功完成。
>0發生錯誤。

示例

  1. 拷貝一個名為 mycronjobs 的檔案,到 /var/admn/cron/crontabs 目錄下,輸入以下內容:

    crontab mycronjobs
  2. 將時間以小時的形式把每個小時寫到 console 中,輸入:

    0 * * * * echo The hour is `date` 。
    >/dev/console
  3. 要在每個星期一、星期三和星期五的 6:30 a.m. 執行 calendar 命令,輸入:

    30 6 * * 1,3,5 /usr/bin/calendar
  4. 要在一年的每一天的 6:30 執行 calendar 命令,輸入:

    30 6 * * * /usr/bin/calendar
  5. 要在八月的每天午夜執行一個稱為 maintenance 的指令碼,輸入:

    0 0 * 8 * /u/harry/bin/maintenance
  6. 為命令的標準輸入定義文字,輸入:

    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當新的作業的提交是由 crontabat 命令完成時,一個傳送訊息到 cron 守護程式的命名管道。
/var/spool/cron/crontabs指定 crontab 緩衝池區域。
/var/adm/cron/cron.allow指定使用者列表,這些使用者被允許訪問 crontab 命令。
/var/adm/cron/cron.deny指定使用者列表,這些使用者不被允許訪問 crontab 命令。

相關資訊

auditpr 命令、sh 命令、wall 命令。

cron 守護程式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/51862/viewspace-180582/,如需轉載,請註明出處,否則將追究法律責任。

相關文章