天天看點

『學了就忘』Linux系統定時任務 — 87、隻執行一次的定時任務

目錄

1、at服務管理

2、at指令的通路控制

3、at指令

4、其他at管理指令

5、總結

定時任務是在伺服器上常用到的一個工作。

在你指定的時間,系統會自動執行你指定的程式(腳本或者指令)。

Linxu系統中的定時任務不難,關鍵是如何寫出正确的腳本。

在Linxu系統中,有三種用于任務排程的工具:

<code>at</code>指令調用<code>atd</code>服務

<code>crontab</code>指令調用<code>cron(crond)</code>服務。

<code>anacron</code>工具。

隻執行一次的定時任務需使用<code>at</code>指令。

<code>at</code>指令是一次性執行的定時任務。也就是說我在之後什麼時間點,執行一次任務。

<code>at</code>指令要想正确執行,需要<code>atd</code>服務的支援。

<code>atd</code>服務是獨立的服務,是以啟動的指令如下:

提示: 隻要你的Linux系統是安裝的,哪怕是最小化安裝,<code>at</code>指令和<code>cron</code>指令預設都是啟動的。 我們發現大多數服務最後都有個<code>d</code>,這個<code>d</code>代表<code>Daemon</code>(守護程序)的意思。

如果想要讓<code>atd</code>服務開機時自動啟動,可以設定如下指令:

<code>atd</code>服務啟動之後,<code>at</code>指令才可以正常使用,我們還要學習下<code>at</code>指令的通路控制。

這裡的通路控制指的是允許哪些使用者使用<code>at</code>指令設定定時任務,或者不允許哪些使用者使用<code>at</code>指令。

大家可以想象成為設定黑名單或設定白名單,這樣更容易了解。<code>at</code>的通路控制是依靠<code>/etc/at.allow</code>檔案(白名單)和<code>/etc/at.deny</code>檔案(黑名單)這兩個檔案來實作的。

注意:Linux系統中預設是沒有<code>/etc/at.allow</code>檔案的,用到的時候需要自己手動建立。

具體規則如下:

如果系統中有<code>/etc/at.allow</code>檔案,那麼隻有寫入<code>/etc/at.allow</code>檔案(白名單)中的使用者可以使用<code>at</code>指令,其他使用者不能使用<code>at</code>指令(<code>/etc/at.deny</code>檔案會被忽略,也就是說同一個使用者既寫入<code>/etc/at.allow</code>檔案,也寫入<code>/etc/at.deny</code>檔案,那麼這個使用者是可以使用<code>at</code>指令的,因為<code>/etc/at.allow</code>檔案優先級更高。)。

如果系統中沒有<code>/etc/at.allow</code>檔案,隻有<code>/etc/at.deny</code>檔案,那麼寫入<code>/etc/at.deny</code>檔案(黑名單)中的使用者不能使用<code>at</code>指令,其他使用者可以使用<code>at</code>指令。不過這個檔案對<code>root</code>使用者不生效。

如果系統中這兩個檔案都不存在,那麼隻有<code>root</code>使用者可以使用<code>at</code>指令。

系統中預設時隻有<code>/etc/at.deny</code>檔案,而且這個檔案是空的,這樣的話系統中所有的使用者都可以使用<code>at</code>指令。不過如果我們打算控制使用者的<code>at</code>指令權限,把使用者寫入<code>/etc/at.deny</code>檔案即可。

<code>/etc/at.allow</code>檔案的權限更高,如果<code>/etc/at.allow</code>檔案存在,則<code>/etc/at.deny</code>檔案失效。

<code>/etc/at.allow</code>管理行為更加嚴格,因為隻有寫入這個檔案的使用者才能使用<code>at</code>指令,如果需要禁用<code>at</code>指令的使用者較多,則可以把少數使用者寫入這個檔案。

<code>/etc/at.deny</code>檔案的管理較為松散,如果允許使用<code>at</code>指令的使用者較多,則可以把禁用的使用者寫入這個檔案。

不過這兩個檔案都不能對<code>root</code>使用者生效。

格式如下:

<code>at</code>指令隻要指定正确的時間,就可以輸入需要在指定時間執行的指令了.這個指令可以是系統令,也可以是shell腳本。(也就是說确認指令的執行時間之後,按回車在輸入你要執行的指令。)

示例:

查詢指定的定時任務:

我們可以通過下面的<code>atq</code>指令檢視到,Linux系統中<code>at</code>任務清單中,你所需要任務的工作号,然後在通過<code>at -c (工作号)</code>指令來檢視一個<code>at</code>任務的具體内容。

在一個at任務中執行多個系統指令:

<code>at</code>還有查詢(<code>atq</code>)指令和删除(<code>atrm</code>)指令。

指令如下:

<code>at</code>指令平時用的并不多,因為<code>at</code>任務隻能夠執行一次任務。