天天看點

10.linux 定時任務at與crontab

1.1 指令<code>at</code>安裝

    從檔案或标準輸入中讀取指令并在将來的一個時間執行,隻執行一次。<code>at</code>的正常執行需要有守護程序<code>atd.</code>

1.2 使用

    如果不使用管道<code>|</code>或指定選項<code>-f</code>的話,<code>at</code>的執行将會是互動式的,需要在at的提示符下輸入指令:

選項<code>-l</code>或指令<code>atq</code>查詢任務

到達時間後任務被執行,生成一個新檔案file并儲存echo的輸出内容

<code></code>

<code>at</code>指定時間的方法:

1)<code>hh:mm</code>小時:分鐘(當天,如果時間已過,則在第二天執行)

2)<code>midnight</code>(深夜),<code>noon</code>(中午),<code>teatime</code>(下午茶時間,下午4點),<code>today</code>,<code>tomorrow</code>等

3)12小時計時制,時間後加<code>am</code>(上午)或<code>pm</code>(下午)

4)指定具體執行日期<code>mm/dd/yy</code>(月/日/年)或<code>dd.mm.yy</code>(日.月.年)

5)相對計時法<code>now + n units</code>,now是現在時刻,n為數字,units是機關(minutes、hours、days、weeks)

如明天下午2點20分執行建立一個目錄

選項<code>-d</code>或指令<code>atrm</code>表示删除任務

可以使用管道<code>|</code>或選項<code>-f</code>讓<code>at</code>從标準輸入或檔案中獲得任務

<code>atd</code>通過兩個檔案<code>/etc/at.allow</code>和<code>/etc/at.deny</code>來決定系統中哪些使用者可以使用<code>at</code>設定定時任務,它首先檢查<code>/etc/at.allow</code>,如果檔案存在,則隻有檔案中列出的使用者(每行一個使用者名),才能使用at;如果不存在,則檢查檔案<code>/etc/at.deny</code>,不在此檔案中的所有使用者都可以使用at。如果<code>/etc/at.deny</code>是空檔案,則表示系統中所有使用者都可以使用at;如果<code>/etc/at.deny</code>檔案也不存在,則隻有超級使用者(root)才能使用at。

系統中每個使用者都可以擁有自己的<code>cron table</code>,同<code>atd</code>類似,<code>crond</code>也有兩個檔案<code>/etc/cron.allow</code>和<code>/etc/cron.deny</code>用來限制使用者使用cron,規則也和<code>atd</code>的兩個檔案相同。

/etc/cron.deny 表示不能使用crontab 指令的使用者

/etc/cron.allow 表示能使用crontab的使用者。

如果兩個檔案同時存在,那麼/etc/cron.allow 優先。

如果兩個檔案都不存在,那麼隻有超級使用者可以安排作業。

每個使用者都會生成一個自己的crontab 檔案。這些檔案在/var/spool/cron目錄下

crontab -u 指定一個使用者

crontab -l 列出某個使用者的任務計劃

crontab -r 删除某個使用者的任務

crontab -e 編輯某個使用者的任務

對于系統級别的定時任務,這些任務更加重要,大部分linux系統在/etc中包含了一系列與 cron有關的子目錄:<code>/etc/cron.{hourly,daily,weekly,monthly}</code>,目錄中的檔案定義了每小時、每天、每周、每月需要運作的腳本,運作這些任務的精确時間在檔案<code>/etc/crontab</code>中指定。如:

<code>[root@node1 spool]</code><code># cat /etc/crontab</code>

<code>SHELL=</code><code>/bin/bash</code>

<code>PATH=</code><code>/sbin</code><code>:</code><code>/bin</code><code>:</code><code>/usr/sbin</code><code>:</code><code>/usr/bin</code>

<code>MAILTO=root</code>

<code>HOME=/</code>

<code># For details see man 4 crontabs</code>

<code># Example of job definition:</code>

<code># .---------------- minute (0 - 59)</code>

<code># |  .------------- hour (0 - 23)</code>

<code># |  |  .---------- day of month (1 - 31)</code>

<code># |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...</code>

<code># |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat</code>

<code># |  |  |  |  |</code>

<code># *  *  *  *  * user-name command to be executed</code>

<code># run-parts</code>

<code>01 * * * * root run-parts </code><code>/etc/cron</code><code>.hourly</code>

<code>02 4 * * * root run-parts </code><code>/etc/cron</code><code>.daily</code>

<code>22 4 * * 0 root run-parts </code><code>/etc/cron</code><code>.weekly</code>

<code>42 4 1 * * root run-parts </code><code>/etc/cron</code><code>.monthly</code>

<code>第一部分表示分鐘(0-59),* 表示每分鐘</code>

<code>第二部分表示小時(0-23),* 表示每小時</code>

<code>第三部分表示日(1-31),  * 表示每天</code>

<code>第四部分表示月(1-12),  * 表示每月</code>

<code>第五部分表示周幾(0-6,0表示周日),* 表示一周中每天</code>

<code>第六部分表示要執行的任務</code>

<code>anacron</code>的目的并不是完全替代<code>cron</code>,是作為<code>cron</code>的一個補充。<code>anacron</code>的任務定義在檔案<code>/etc/anacrontab</code>中:

<code>[root@node1 spool]</code><code># cat /etc/anacrontab </code>

<code># /etc/anacrontab: configuration file for anacron</code>

<code># See anacron(8) and anacrontab(5) for details.</code>

<code>SHELL=</code><code>/bin/sh</code>

<code># the maximal random delay added to the base delay of the jobs</code>

<code>RANDOM_DELAY=45</code>

<code># the jobs will be started during the following hours only</code>

<code>START_HOURS_RANGE=3-22</code>

<code>#period in days   delay in minutes   job-identifier   command</code>

<code>1       5       </code><code>cron</code><code>.daily              </code><code>nice</code> <code>run-parts </code><code>/etc/cron</code><code>.daily</code>

<code>7       25      </code><code>cron</code><code>.weekly             </code><code>nice</code> <code>run-parts </code><code>/etc/cron</code><code>.weekly</code>

<code>@monthly 45     </code><code>cron</code><code>.monthly            </code><code>nice</code> <code>run-parts </code><code>/etc/cron</code><code>.monthly</code>

<code>本文轉自   a8757906   51CTO部落格,原文連結:http://blog.51cto.com/nxyboy/1950598</code>

繼續閱讀