28.3. At 與 Batch

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

如要使用 atbatch,您必須安裝 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. 檢視等待中的工作

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

28.3.4. 其他的命令列選項

atbatch 的其他命令列選項包括:

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

表格 28-1. atbatch 的命令列選項

28.3.5. At 與 Batch 的存取控制

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

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

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

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

28.3.6. 啟動與停止服務

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