28.3. At 與 Batch

cron 與 anacron 是用來排程重復發生的工作,at 指令是用來排定在一個特定時間執行的一項工作。 batch 指令是用來排定當系統的平均負載低於 0.8 時所執行的一項工作。

如要使用 at 或 batch,您必須安裝 at RPM 套件,而且 atd 服務必須在執行中。 如要查看該套件是否已經安裝,請使用 rpm -q at 指令; 如要查看該項服務是否正在執行中,請使用 /sbin/service atd status 指令。

28.3.1. 設定 At 的工作

如要排定在一個特定時間執行的一項工作,請輸入 at time 指令,這裡的 time 就是要執行指令的時間。

引數 time 可以是下列的其中一種:

必須先指定時間,其後再接可省略的日期,如需關於時間格式的更多資訊,請閱讀 /usr/share/doc/at-<版本>/timespec 的文字檔。

在輸入含有時間引數的 at 指令後,會出現 at> 提示符號,請在其後輸入要執行的指令,並按下 [Enter] 按鍵,再按下 Ctrl-D。 在此可以指定一個以上的指令,只要在按下 [Enter] 按鍵後輸入要執行的指令即可。 在輸入所有的指令之後,按下 [Enter] 鍵以換至下一行,再按下 Ctrl-D 結束。 除此之外,可以在提示符號下輸入 shell 程式碼,在程式碼每一行的最後按下 [Enter] 鍵。 假如輸入一個程式碼,將會使用在該使用者的 SHELL 環境設定的 shell,如使用者的登入 shell 或 /bin/sh(端視何者先被找到)。

假如這些指令或程式碼試著要顯示資訊到標準輸出,這輸出將會以電子郵件寄給使用者。

使用 atq 的指令來檢視等待中的工作,請參考 菴 28.3.3 節 以取得更多資訊。

您也可以限制使用 at 指令,請參考 菴 28.3.5 節 以取得細節。

28.3.2. 設定 Batch 的工作

如要在系統的平均負載低於 0.8 時執行一個一次性的工作,請使用 batch 指令。

在輸入 batch 指令後,將會出現 at> 提示符號,再來請輸入要執行的指令,並按下 [Enter] 鍵,最後再按下 Ctrl-D。 在此可以指定一個以上的指令,只要在按下 [Enter] 按鍵後輸入要執行的指令即可。 在輸入所有的指令之後,按下 [Enter] 鍵以換至下一行,再按下 Ctrl-D 結束。 除此之外,可以在提示符號下輸入 shell 程式碼,在程式碼每一行的最後按下 [Enter] 鍵。 假如輸入一個程式碼,將會使用在該使用者的 SHELL 環境設定的 shell,如使用者的登入 shell 或 /bin/sh(端視何者先被找到)。 當平均負載低於 0.8 時,將會執行這些指令或程式碼。

假如這些指令或程式碼試著要顯示資訊到標準輸出,這輸出將會以電子郵件寄給使用者。

使用 atq 的指令來檢視等待中的工作,請參考 菴 28.3.3 節 以取得更多資訊。

您也可以限制使用 batch 指令,請參考 菴 28.3.5 節 以取得細節。

28.3.3. 檢視等待中的工作

如要檢視等待中的 at 與 batch 工作,請使用 atq 指令,它將列出等待中的工作,每一行顯示一項工作。 每一行都為以下這種格式: 工作序號、日期、小時、工作的等級與使用者名稱。 每一個使用者只可以檢視他們自己設定的工作。 假如是 root 使用者執行 atq 指令,所有使用者的全部工作都將會列出來。

28.3.4. 其他的命令列選項

at 與 batch 的其他命令列選項包括:

選項說明
-f從一個檔案來讀取指令或 shell 程式碼,而不是在提示符號指定它們。
-m當工作完成後,傳送電子郵件給使用者。
-v顯示將要執行工作的時間。

表格 28-1. at 與 batch 的命令列選項

28.3.5. At 與 Batch 的存取控制

可以使用 /etc/at.allow 與 /etc/at.deny 檔案來限制 at 與 batch 指令的存取使用。 這兩個存取控制檔案的格式是在每一行放置一個使用者名稱,兩個檔案中都不允許有空白字元。 假如在修改存取控制檔案後,並不需要重新啟動 at 系統程式 (atd),這些存取控制檔案將在使用者試著執行 at 或 batch 指令時被讀取。

root 使用者隨時都可以執行 at 與 batch 指令,不管使用者的名稱是否有列在存取控制檔案中。

假如 at.allow 檔案存在的話,只有在其內有列出的使用者允許使用 at 或 batch,而 at.deny 檔案則會被忽略。

假如 at.allow 檔案不存在的話,所有在 at.deny 列出的使用者都不允許使用 at 或 batch。

28.3.6. 啟動與停止服務

如要啟動 at 服務,請使用 /sbin/service atd start 指令; 如要停止該項服務,請使用 /sbin/service atd stop 指令。 在此建議您在開機時即刻啟動這個服務,請參考 第14章 以取得關於在開機時自動啟動 cron 服務的細節。