SCO UNIX作業(yè)調(diào)度
作業(yè)調(diào)度是shell的一個特性,它允許用戶使用作業(yè)調(diào)度命令,所謂作業(yè)調(diào)度實際上是時鐘守護進程cron按照用戶所提交的確定的時間在這個時間內(nèi)執(zhí)行某些運行作業(yè),cron守護進程將在設(shè)定的日期規(guī)定的時間內(nèi)自動地執(zhí)行某樣任務(wù)。可在系統(tǒng)負(fù)載較輕時安排這些非交互式作業(yè)的運行,在Unix中與cron配合提交任務(wù)的命令有三種:at,batch,crontab。 cron進程的活動可存放在日志文件中,該日志文件為/usr/lib/cron/log文件,是否對cron活動進行記錄還要一個變量CRONLOG的設(shè)置,這個變量存放于/etc/default/cron文件中。缺省情況下,這個變量設(shè)置值為NO,這說明cron進程的活動內(nèi)容不保留在任何文件中,若需要可將其值改為yes或?qū)⑵湮募臑槠渌脩粜枰奈募4送猓?etc/default/cron中MAXLOGSIZE 限制了log文件的大小,該變量以512字節(jié)為單位設(shè)定的log的最大塊數(shù),確省為2048塊。 在/etc/default/cron中的MAXCRON變量,控制在同一時刻允許運行的最大進程數(shù)量,確省為100。 若系統(tǒng)的若干用戶要使用cron進程,那么這個用戶必須授予cron子系統(tǒng)的權(quán)限,給特定用戶授予cron子系統(tǒng)的權(quán)限的操作為 scoadmin->system->cron manager->shecdule->default->user->allow 或 scoadmin account manager ->選中用戶->users->user authorizations->authorized add cron(取消use system default ...)->ok 對應(yīng)有兩個文件可看到那些用戶具備此權(quán)限,分別為: /usr/lib/cron/cron.allow誰能安排cron作業(yè)的確切列表 /usr/lib/corn/cron.deny表示誰不能安排cron作業(yè)的確切列表,只有cron.allow不存在時才有作用 如果這兩個文件都不存在,表示只有root用戶才有安排cron作業(yè)的權(quán)限。若兩個文件都在,則cron.allow具有更高的優(yōu)先權(quán)。 一、at,batch使用方法 at,batch的功能是在以后某個時間內(nèi)執(zhí)行某些命令。at命令允許指定作業(yè)執(zhí)行時間,batch命令只有在系統(tǒng)負(fù)載允許的情況下執(zhí)行該作業(yè)。每個作業(yè)的id號和執(zhí)行時間都可輸出到錯誤輸出上。 at的命令行結(jié)構(gòu): at [ -m ] [ -f file ] [ -q letter ] time [ date ] [ increment ] at [ -m ] [ -f file ] [ -q letter ] -t [[CC]YY]MMDDhhmm.[SS] at -r job-id ... job-id指at命令作業(yè)的id號,-r指刪除該id號的作業(yè) at -l [job -d ...] 顯示當(dāng)前的at作業(yè) at -l -q letter batch不帶參數(shù),其提交的作業(yè)比at提交的作業(yè)比具有較低的優(yōu)先級,其何時執(zhí)行要看系統(tǒng)中已提交的作業(yè)數(shù)量。系統(tǒng)空閑時,提交的作業(yè)即可運行。 at,batch,crontab三個命令的使用范圍是有一定限制的,一般情況下,at,batch提交一次性的作業(yè),作業(yè)運行完后不再運行。而crontab所提交的作業(yè)一般以固定的周期運行,在系統(tǒng)允許的情況在指定的周期內(nèi)系統(tǒng)反復(fù)執(zhí)行該作業(yè)。 相關(guān)文件與目錄 /usr/lib/cron main cron Directory /usr/lib/cron/at.allow list of allowed users /usr/lib/cron/at.deny list of denIEd users /usr/lib/cron/queuedefs scheduling information /usr/spool/cron/atjobs spool area /usr/lib/cron/.protoat and batch environment information /usr/lib/cron/.proto.a at shell environment /usr/lib/cron/.proto.b batch shell environment /usr/lib/cron/.protoat and batch environment information /usr/lib/cron/.proto.a at shell environment /usr/lib/cron/.proto.b batch shell environment 部分參數(shù)說明分別如下 1)time 表示時間,可指定為1,2,或4個數(shù)字,1或2個數(shù)字被認(rèn)為是小時,4個數(shù)字被認(rèn)為是小時和分鐘,格式為 hh:mmm 2)date 表示日期 3)increment 表示要在前面所指定的時間(time[date])再推后一段時間 4)-t [[cc]YY]MMDDhhmm.[SS] CC 世紀(jì) YY 年 MM 月 DD 日 hh 時 mm 分 SS 秒 5)-q letter 把指定作業(yè)置于指定字母所指示的隊列內(nèi),可以是從a到z的任何小寫字母以下隊列有特殊意義 a at 隊列 b batch 隊列 c cron 隊列 6)-m 不使用-m 選項時,作業(yè)的標(biāo)準(zhǔn)輸出將直接mail給相應(yīng)用戶(除非作業(yè)被明確重新定向)。使用-m 選項時,即使作業(yè)沒有輸出,也將以郵件形式通知用戶。 7)-f file 指定包含有at 作業(yè)的源文件名,以代替從標(biāo)準(zhǔn)輸入。 8)-l [job-id] 列出指定作業(yè)的相關(guān)信息 9)-r job-id 刪除指定作業(yè) at 和 batch 作業(yè)提交后,均被指定一個相應(yīng)的作業(yè)標(biāo)識符,at作業(yè)帶有 后綴.a, batch作業(yè)帶有后綴 .b 。所有作業(yè)以其作業(yè)標(biāo)識符為文件名,保存在/usr/spool/cron/atjobs目錄中。 二、crontab的使用方法 crontab命令的功能是在一定的時間間隔調(diào)度一些命令的執(zhí)行。通常這些要運行的命令放在crontab文件中,該文件為/usr/spool/cron/crontabs下面與用戶名相同的文件,或在每次執(zhí)行時不使用該文件名直接使用crontab -e 指令。(在at命令中,命令文件的存放是任意的)。命令執(zhí)行默認(rèn)的結(jié)果,無論是標(biāo)準(zhǔn)輸出還是錯誤輸出,都將以郵件形式發(fā)給用戶。 crontab命令有三種形式的命令行結(jié)構(gòu): crontab [cronfile] crontab [-e|-l|-r] crontab -l -u [-e|-l|-r] 相關(guān)文件目錄 /usr/lib/cron main cron directory /usr/spool/cron/crontabs crontab directory /usr/lib/cron/cron.allow list of allowed users /usr/lib/cron/cron.deny list of denied users /usr/lib/cron/queuedefs cron data file 1) crontab [cronfile] cronfile是命令文件的名字。如果在命令行中指定了這個文件,那么執(zhí)行crontab命令,則將這個文件拷貝到crontabs目錄下;如果在命令行中沒有制定這個文件,crontab命令將接受標(biāo)準(zhǔn)輸入(鍵盤)上鍵入的命令,并將他們也存放在crontab目錄下。 (不建議使用該方式,如果用crontab cronfile ,將會把原來的已經(jīng)提交的cron作業(yè)刪除) cronfile 是具有一定格式的普通文件,在文件中可以包含多余一個的作業(yè)信息,每個作業(yè)作為一個登記項,獨占一行,用空格分開的6個字段,前五個字段可以取整數(shù)值,指定何時開始工作,第六個域是字符串,稱為命令字段,其中包括了crontab調(diào)度執(zhí)行的命令。具體格式如下 minutes hours day_of_month month day_of_week command minutes 分鐘 0-60 hours 小時 0-23 day_of_month 日 1-31 month 月 1-12 day_of_week 星期的日 0-6(0表示星期日) command 命令 任何非交互的命令 2) -l 顯示已經(jīng)提交的cron 作業(yè) 3)-e 對已經(jīng)提交的cron 作業(yè)編輯,或添加,刪除作業(yè)建議使用該方式添加cron作業(yè),相比手工修改/usr/spool/cron/crontabs/username文件,使用crontab -e 可以對提交的作業(yè)進行語法檢查,如果沒有按照規(guī)定6個字段提交作業(yè),會提示相應(yīng)錯誤信息。 如果手工對/usr/spool/cron/crontabs/username 編輯,為確保作業(yè)提交可按照以下步驟執(zhí)行用crontab -e 編輯該文件 :x存盤退出或用ps 命令查找cron進程,用kill 殺下/etc/cron進程, rm /usr/lib/cron/FIFO;/etc/cron 注釋: /usr/lib/cron/FIFO,當(dāng)新的作業(yè)提交由crontab完成時,一個發(fā)送消息到cron守護進程的命令管道。 4) -r 刪除當(dāng)前已經(jīng)提交的cron 作業(yè) 5) -u user 對指定用戶的cron 作業(yè)進行維護。 三、環(huán)境文件 /usr/lib/cron/.proto定義的shell環(huán)境適用于 at和batch 。 /usr/lib/cron/.proto.a 適用于at /usr/lib/cron/.proto.b 適用于batch .proto.a ,.proto.b 與 .proto相比有更高的優(yōu)先權(quán)。 默認(rèn)情況下,只存在 .proto.b 和 .proto ,且內(nèi)容相同。 以上相關(guān)維護可以使用 cron manager 實現(xiàn) cron作業(yè)提交后,未能定時完成相應(yīng)任務(wù),可按照下面的方法查找原因 1。查看 /usr/lib/cron/log 中的提示 2。將提交的作業(yè)輸出重新定向,查看相應(yīng)的log文件 作業(yè)提交后未能完成相應(yīng)任務(wù),通常是因為環(huán)境變量設(shè)置的問題 例如:因PATH等變量的設(shè)置未找到相關(guān)的程序等 crontab命令簡介 簡介 crontab-操作每個用戶的守護程序和該執(zhí)行的時間表。 部分參數(shù)說明 crontab file [-u user]-用指定的文件替代目前的crontab。 crontab-[-u user]-用標(biāo)準(zhǔn)輸入替代目前的crontab. crontab-1[user]-列出用戶目前的crontab. crontab-e[user]-編輯用戶目前的crontab. crontab-d[user]-刪除用戶目前的crontab. crontab-c dir- 指定crontab的目錄。 crontab文件的格式:M H D m d cmd. M: 分鐘(0-59)。 H:小時(0-23)。 D:天(1-31)。 m: 月(1-12)。 d: 一星期內(nèi)的天(0~6,0為星期天)。 cmd要運行的程序,程序被送入sh執(zhí)行,這個shell只有USER,HOME,SHELL這三個環(huán) 境變量。 下面是一個例子文件: #MIN HOUR DAY MONTH DAYOFWEEK COMMAND #每天早上6點 0 6 * * * date #每兩個小時 0 */2 * * * date #晚上11點到早上8點之間每兩個小時,早上8點 0 23-7/2,8 * * * date #每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 0 11 4 * mon-wed date #1月份1日早上4點 0 4 1 jan* date 范例 lark:~>crontab-1 列出用戶目前的crontab. #MIN HOUR DAY MONTH DAYOFWEEK COMMAND 10 6* * * date 0*/2* * * date 0 23-7/2,8 * * * date
