Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統(tǒng)計(jì)

          留言簿(23)

          積分與排名

          優(yōu)秀學(xué)習(xí)網(wǎng)站

          友情連接

          閱讀排行榜

          評(píng)論排行榜

          (定時(shí)任務(wù))crontab和cron 的用法

          cron 是一個(gè)可以用來(lái)根據(jù)時(shí)間、日期、月份、星期的組合來(lái)調(diào)度對(duì)重復(fù)任務(wù)的執(zhí)行的守護(hù)進(jìn)程。

          cron 假定系統(tǒng)持續(xù)運(yùn)行。如果當(dāng)某任務(wù)被調(diào)度時(shí)系統(tǒng)不在運(yùn)行,該任務(wù)就不會(huì)被執(zhí)行。

          要使用 cron 服務(wù),你必須安裝了 vixie-cron RPM 軟件包,而且必須在運(yùn)行 crond 服務(wù)。要判定該軟件包是否已安裝,使用 rpm -q vixie-cron 命令。要判定該服務(wù)是否在運(yùn)行,使用 /sbin/service crond status 命令。

          37.1.1. 配置 cron 任務(wù)

          cron 的主配置文件是 /etc/crontab,它包括下面幾行:

          SHELL=/bin/bash
                      PATH=/sbin:/bin:/usr/sbin:/usr/bin
                      MAILTO=root
                      HOME=/
                      # run-parts
                      01 * * * * root run-parts /etc/cron.hourly
                      02 4 * * * root run-parts /etc/cron.daily
                      22 4 * * 0 root run-parts /etc/cron.weekly
                      42 4 1 * * root run-parts /etc/cron.monthly

          前四行是用來(lái)配置 cron 任務(wù)運(yùn)行環(huán)境的變量。SHELL 變量的值告訴系統(tǒng)要使用哪個(gè) shell 環(huán)境(在這個(gè)例子里是 bash shell);PATH 變量定義用來(lái)執(zhí)行命令的路徑。cron 任務(wù)的輸出被郵寄給 MAILTO 變量定義的用戶名。如果 MAILTO 變量被定義為空白字符串(MAILTO=""),電子郵件就不會(huì)被寄出。HOME 變量可以用來(lái)設(shè)置在執(zhí)行命令或腳本時(shí)使用的主目錄。

          /etc/crontab 文件中的每一行都代表一項(xiàng)任務(wù),它的格式是:

          minute   hour   day   month   dayofweek   command

           

          • minute — 分鐘,從 0 到 59 之間的任何整數(shù)

          • hour — 小時(shí),從 0 到 23 之間的任何整數(shù)

          • day — 日期,從 1 到 31 之間的任何整數(shù)(如果指定了月份,必須是該月份的有效日期)

          • month — 月份,從 1 到 12 之間的任何整數(shù)(或使用月份的英文簡(jiǎn)寫(xiě)如 jan、feb 等等)

          • dayofweek — 星期,從 0 到 7 之間的任何整數(shù),這里的 0 或 7 代表星期日(或使用星期的英文簡(jiǎn)寫(xiě)如 sun、mon 等等)

          • command — 要執(zhí)行的命令(命令可以是 ls /proc >> /tmp/proc 之類的命令,也可以是執(zhí)行你自行編寫(xiě)的腳本的命令。)

          在以上任何值中,星號(hào)(*)可以用來(lái)代表所有有效的值。譬如,月份值中的星號(hào)意味著在滿足其它制約條件后每月都執(zhí)行該命令。

          整數(shù)間的短線(-)指定一個(gè)整數(shù)范圍。譬如,1-4 意味著整數(shù) 1、2、3、4。

          用逗號(hào)(,)隔開(kāi)的一系列值指定一個(gè)列表。譬如,3, 4, 6, 8 標(biāo)明這四個(gè)指定的整數(shù)。

          正斜線(/)可以用來(lái)指定間隔頻率。在范圍后加上 /<integer> 意味著在范圍內(nèi)可以跳過(guò) integer。譬如,0-59/2 可以用來(lái)在分鐘字段定義每?jī)煞昼姟ig隔頻率值還可以和星號(hào)一起使用。例如,*/3 的值可以用在月份字段中表示每三個(gè)月運(yùn)行一次任務(wù)。

          開(kāi)頭為井號(hào)(#)的行是注釋,不會(huì)被處理。

          如你在 /etc/crontab 文件中所見(jiàn),它使用 run-parts 腳本來(lái)執(zhí)行 /etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly 目錄中的腳本,這些腳本被相應(yīng)地每小時(shí)、每日、每周、或每月執(zhí)行。這些目錄中的文件應(yīng)該是 shell 腳本。

          如果某 cron 任務(wù)需要根據(jù)調(diào)度來(lái)執(zhí)行,而不是每小時(shí)、每日、每周、或每月地執(zhí)行,它可以被添加到 /etc/cron.d 目錄中。該目錄中的所有文件使用和 /etc/crontab 中一樣的語(yǔ)法。

          # record the memory usage of the system every monday
                      # at 3:30AM in the file /tmp/meminfo
                      30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
                      # run custom script the first day of every month at 4:10AM
                      10 4 1 * * /root/scripts/backup.sh

          例 37-1. crontab 的例子

          根用戶以外的用戶可以使用 crontab 工具來(lái)配置 cron 任務(wù)。所有用戶定義的 crontab 都被保存在 /var/spool/cron 目錄中,并使用創(chuàng)建它們的用戶身份來(lái)執(zhí)行。要以某用戶身份創(chuàng)建一個(gè) crontab 項(xiàng)目,登錄為該用戶,然后鍵入 crontab -e 命令,使用由 VISUALEDITOR 環(huán)境變量指定的編輯器來(lái)編輯該用戶的 crontab。該文件使用的格式和 /etc/crontab 相同。當(dāng)對(duì) crontab 所做的改變被保存后,該 crontab 文件就會(huì)根據(jù)該用戶名被保存,并寫(xiě)入文件 /var/spool/cron/username 中。

          cron 守護(hù)進(jìn)程每分鐘都檢查 /etc/crontab 文件、etc/cron.d/ 目錄、以及 /var/spool/cron 目錄中的改變。如果發(fā)現(xiàn)了改變,它們就會(huì)被載入內(nèi)存。這樣,當(dāng)某個(gè) crontab 文件改變后就不必重新啟動(dòng)守護(hù)進(jìn)程了。

          37.1.2. 控制對(duì) cron 的使用

          /etc/cron.allow/etc/cron.deny 文件被用來(lái)限制對(duì) cron 的使用。這兩個(gè)使用控制文件的格式都是每行一個(gè)用戶。兩個(gè)文件都不允許空格。如果使用控制文件被修改了,cron 守護(hù)進(jìn)程(crond)不必被重啟。使用控制文件在每次用戶添加或刪除一項(xiàng) cron 任務(wù)時(shí)都會(huì)被讀取。

          無(wú)論使用控制文件中的規(guī)定如何,根用戶都總是可以使用 cron。

          如果 cron.allow 文件存在,只有其中列出的用戶才被允許使用 cron,并且 cron.deny 文件會(huì)被忽略。

          如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用戶都被禁止使用 cron。

          37.1.3. 啟動(dòng)和停止服務(wù)

          要啟動(dòng) cron 服務(wù),使用 /sbin/service crond start 命令。要停止該服務(wù),使用 /sbin/service crond stop 命令。推薦你在引導(dǎo)時(shí)啟動(dòng)該服務(wù)



          (定時(shí)任務(wù))crontab 的用法

          crontab task 格式

          * * * * * task
          分 時(shí) 日 月 周 task

          第1列 分鐘1~5 9  (0表示0分)
          第2列 小時(shí)1~2 3(0表示子夜)
          第3列 日1~3 1   
          第4列 月1~1 2  
          第5列 星期0~6(0表示星期天)
          第6列 要運(yùn)行的命令

          一些例子:
          30 21* * * /apps/bin/cleanup.sh
          上面的例子表示每晚的2 1 : 3 0運(yùn)行/ a p p s / b i n目錄下的c l e a n u p . s h。
          45 4 1,10,22 * * /apps/bin/backup.sh
          上面的例子表示每月1、1 0、2 2日的4 : 4 5運(yùn)行/ a p p s / b i n目錄下的b a c k u p . s h。
          10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
          上面的例子表示每周六、周日的1 : 1 0運(yùn)行一個(gè)f i n d命令。
          0,30 18-23 * * * /apps/bin/dbcheck.sh
          上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之間每隔3 0分鐘運(yùn)行/ a p p s / b i n目錄下的d b c h e c k . s h。
          0 23 * * 6 /apps/bin/qtrend.sh
          上面的例子表示每星期六的11 : 0 0 p m運(yùn)行/ a p p s / b i n目錄下的q t r e n d . s h

          實(shí)現(xiàn)定時(shí)task的兩種方式
          一種是編輯一個(gè)文件,用crontab 載入
          一種是用crontab -e 直接編輯生效

          我自己一個(gè)例子

          每隔以一分鐘往一個(gè)文件打入一堆字符
          先vi crontab1
          #every minute echo char to file
          1-59 * * * * echo `date`" lj\n" >> /opt/lijie/lj.txt
          最好加上注釋
          這樣就能明確當(dāng)前的這個(gè)定時(shí)任務(wù)的目的
          然后 crontab crontab1載入crontab1這個(gè)定時(shí)任務(wù)

           

          另外一種是
          crontab -e
          #every minute echo char to file
          1-59 * * * * echo `date`" lj\n" >> /opt/lijie/lj.txt

          date 用單引號(hào),是表示如果date是一個(gè)命令,就作為命令執(zhí)行
          如果你直接用date ,那么輸出的是"date"這個(gè)字符串,而不是date這個(gè)命令的執(zhí)行結(jié)果

          >> 是附加到文件末尾,而>是直接覆蓋文件

          如果crontab -e無(wú)法編輯
          那么是你的環(huán)境變量沒(méi)有配置
          請(qǐng)你進(jìn)入 vi /etc/profile
          加上
          EDITOR=vi
          export EDITOR

          crontab -l 列出所有定時(shí)任務(wù)

          如果要?jiǎng)h除一個(gè)定時(shí)任務(wù)
          那么
          crontab -e
          注釋掉對(duì)應(yīng)定時(shí)任務(wù)語(yǔ)句
          例如要?jiǎng)h除我剛剛定義的那個(gè)定時(shí)任務(wù)
          #every minute echo char to file
           1-59 * * * * echo `date`" lj\n" >> /opt/lijie/lj.txt
          只需要
          #every minute echo char to file
          #1-59 * * * * echo `date`" lj\n" >> /opt/lijie/lj.txt

          如果用crontab -r
          就刪除拉所有的定時(shí)任務(wù)

          特別注意:
          1, 如果用crontab 文件來(lái)載入定時(shí)任務(wù),將會(huì)沖掉定時(shí)任務(wù)
          所以如果要新增定時(shí)任務(wù),最好就用crontab -e來(lái)新增定時(shí)任務(wù)
          不要用crontab 文件。

          2, crontab的日志文件為 /var/log/cron

          3, 如果使用 crontab <filename> 來(lái)設(shè)置cron,一定要注意文件亂碼的問(wèn)題。我就碰到一個(gè)問(wèn)題,/var/log/cron 日志里面顯示 Dec 28 11:34:00 TARGET CROND[13449]: (hnuc) CMD (/home/hnuc/shell/t.sh^M) 后面的~M是亂碼,原因是:我是使用editplus編輯的cron file,里面的回車換行符號(hào)是dos的而不是linux或者unix的。這里的^M 實(shí)際上是個(gè)dos的換行符,在linux環(huán)境下解析成這個(gè)了。

          posted on 2007-09-18 23:27 都市淘沙者 閱讀(4360) 評(píng)論(0)  編輯  收藏 所屬分類: Linux/OpenVPN/Python

          主站蜘蛛池模板: 禄丰县| 武山县| 东平县| 新巴尔虎左旗| 集安市| 招远市| 竹北市| 古田县| 万载县| 炉霍县| 民和| 三门县| 鲁山县| 越西县| 西吉县| 宝山区| 社旗县| 临汾市| 绥中县| 元谋县| 措美县| 刚察县| 手游| 静宁县| 贵阳市| 郴州市| 沂水县| 阿荣旗| 青铜峡市| 镇原县| 新余市| 正定县| 惠东县| 肥城市| 青冈县| 德州市| 青川县| 沽源县| 湖北省| 拜城县| 中西区|