FreeBSD定時執行程式(cron)(轉)

gugu99發表於2007-08-11
FreeBSD定時執行程式(cron)(轉)[@more@]

  Unix系統提供了cron和at命令,使系統和使用者可以定時執行一定的程式,而不需手工啟動。

  使用cron用於週期性的執行一個命令,為了使用它,必須編輯crontab檔案。系統預設的/etc/crontab 檔案為:

# /etc/crontab - root's crontab for FreeBSD

#

# $Id: crontab,v 1.13 1996/01/06 22:21:37 ache Exp $

# From: Id: crontab,v 1.6 1993/05/31 02:03:57 cgd Exp

#

SHELL=/bin/sh

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

HOME=/var/log

#

#minute  hour  mday  month  wday  who  command

#

*/5   *    *    *    *    root  /usr/libexec/atrun

#

# rotate log files every hour, if necessary

0  *  *  *  *  root  /usr/sbin/newsyslog

#

# do daily/weekly/monthly maintenance

0    2    *    *    *    root  /etc/daily 2>&1 | sendmail root

30   3    *    *    6    root  /etc/weekly 2>&1 | sendmail root

30   5    1    *    *    root  /etc/monthly 2>&1 | sendmail root

#

# time zone change adjustment for wall cmos clock,

# does nothing, if you have UTC cmos clock.

# See adjkerntz(8) for details.

1,31  0-4  *  *  *  root  /sbin/adjkerntz  -a

  在這個crontab檔案中首先設定了幾個環境變數,cron執行這個檔案時先設定這些環境變數,然後按照每列規定的時間來執行相應的命令。第一列為分鐘,規定每小時的第幾分執行相應的程式,第二列為每天第幾小時執行程式,,第三列為每月的第幾天,第四列為第幾周,第五列為每週的第幾天,第六列為執行該檔案的使用者身份,第七列為要執行的命令。

  普通使用者也可以使用crontab命令來建立和維護自己的crontab檔案。由於是使用者不能更改執行程式的標識的,因此使用者的crontab就不需第六列──執行程式的使用者身份,而只要直接跟隨要執行的命令。使用 “crontab -e” 命令,使用編輯器按照相應的格式編輯自己的crontab檔案,或者使用 “crontab -l ” 列出現有crontab檔案的內容,當然只有root使用者才能檢視其他使用者的crontab檔案:

$ crontab -l

12 0 * * * /home/wb/bin/getfiles

  所有使用者的crontab設定檔案都放在/var/cron/tabs目錄下,檔名與每個使用者的使用者名稱相同。cron中的命令執行結果將被系統使用mail寄給每個使用者。在/var/cron目錄下還有crontab執行的記錄檔案,系統管理員可以按照這個檔案來檢查系統安全性,檢查是否有影響系統安全的程式被執行。

  與cron不同,at命令用於在一定的時間後或在一定的時刻執行設定好的命令。at命令使用一個時間參數列示何時執行命令,然後就從標準輸入中讀入要執行的命令,此時就如同在shell下操作一樣輸入要執行的命令,最後使用^D 退出輸入命令的模式。使用者不必擔心真正執行命令時是否能夠找到正確的程式,at會將當前shell的設定,包括環境變數,保留起來,以便在執行命令時創造一個與啟動at時完全相同的執行環境。

$ at 1:00am +2days

wget ftp://ftp.cdrom.com/pub/FreeBSD/packages/All/netscape.tgz

^D

  上面命令將在兩天後的凌晨1:00時啟動程式下載檔案,當然at命令並不是十分精確,其執行時間只是表示大概時間,可能與標準時間存在一兩分鐘的差異。at也支援各種複雜的時間表示方法,可以使用hhmm,hh:mm,或者加上am或pm結尾的12小時制方式。還可以使用年月日,規定程式執行的日期:

$ at 1:00am Mar 5

echo Hello | mail root

^D

Job 5 will be executed using /bin/sh

$ atq

Date          Owner  Queue  Job#

01時00分00秒 00/03/05  root  c    5

$ atrm 5

  使用者的at程式執行結果也被系統郵寄給該使用者,使用者可以使用mail來檢視程式的輸出結果或執行錯誤。當使用者啟動at命令之後,可以使用atq命令來檢視自己還沒有執行的at命令,如果atq是由root執行,則將列出系統中所有沒有執行的at命令。然後可以使用atrm命令根據atq輸出Job號來刪除at作業。

  系統使用/var/at/at.allow和/var/at/at.deny檔案來配置可以使用at命令的使用者,和不可以使用at命令的使用者。其中at.allow的優先權更高,如果存在at.allow,就只允許這個檔案中列出的使用者使用at,而不考慮任何不在這個檔案中列出的使用者。因此可以使用一個空at.allow檔案禁止所有使用者使用at。當不存在at.allow檔案的時候,那麼凡不在at.deny檔案中列出的使用者都可以使用at。

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

相關文章