atd 的啟動與 at 運作的方式:
要使用單一工作排程時,我們的 Linux 系統上面必須要有負責這個排程的服務,那就是 atd 這個玩意兒。 不過並非所有的 Linux distributions 都預設會把他打開的,所以呢,某些時刻我們必須要手動將他啟用才行。 啟用的方法很簡單,就是這樣:
linux-7xud:~ # /etc/init.d/atd restart
Shutting down service at daemon done
Starting service at daemon done
linux-7xud:~ # chkconfig atd on <設定開機時就啟動這個服務>
at 的運作方式:
我們使用 at 這個指令來產生所要運作的工作,並將這個工作以文字檔的方式寫入 /var/spool/at/ 目錄內,該工作便能等待 atd 這個服務的取用與執行了
怎麼達到使用 at 的列管:
我們可以利用 /etc/at.allow 與 /etc/at.deny 這兩個檔案來進行 at 的使用限制呢! 加上這兩個檔案後, at 的工作情況其實是這樣的:
透過這個說明,我們知道 /etc/at.allow 是管理較為嚴格的方式,而 /etc/at.deny 則較為鬆散 (因為帳號沒有在該檔案中,就能夠執行 at 了)。在一般的 distributions 當中,由於假設系統上的所有用戶都是可信任的, 因此系統通常會保留一個空的 /etc/at.deny 檔案,意思是允許所有人使用 at 指令的意思 (您可以自行檢查一下該檔案)。 不過,萬一你不希望有某些使用者使用 at 的話,將那個使用者的帳號寫入 /etc/at.deny 即可! 一個帳號寫一行。
單一工作排程的進行就使用 at 這個指令囉!這個指令的運作非常簡單!將 at 加上一個時間即可!基本的語法如下:
範例一:再過五分鐘後,將 /root/.bashrc 寄給 root 自己
linux-7xud:~ # at now + 5 minutes <距現在5分鐘後執行>
warning: commands will be executed using /bin/sh
at> /bin/mail root -s "Test at job" < /root/.bashrc
at>
job 4 at 2009-05-28 09:05 <列入job 4, 可用 -c查詢>
範例二:將上述的第 4 項工作內容列出來查閱
linux-7xud:~ # at -c 4
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
...
/bin/mail root -s "Test at job" < /root/.bashrc
Ps. 事實上,當我們使用 at 時會進入一個 at shell 的環境來讓使用者下達工作指令,此時,建議你最好使用絕對路徑來下達你的指令,比較不會有問題喔!由於指令的下達與 PATH 變數有關, 同時與當時的工作目錄也有關連 (如果有牽涉到檔案的話),因此使用絕對路徑來下達指令,會是比較一勞永逸的方法。因為 at 在運作時,會跑到當時下達 at 指令的那個工作目錄!
範例三:距現在五分鐘後, 在終端機1 上顯示 "Hello"
linux-7xud:~ # at now + 5 minutes
warning: commands will be executed using /bin/sh
at> echo "Hello" > /dev/tty1
at>
job 5 at 2009-05-28 09:14
Ps. 由於 at 工作排程的使用上,系統會將該項 at 工作獨立出你的 bash 環境中, 直接交給系統的 atd 程式來接管,因此,當你下達了 at 的工作之後就可以立刻離線了, 剩下的工作就完全交給 Linux 管理即可, 那就是『背景執行』的功能了.
at 工作的管理
那麼萬一我下達了 at 之後,才發現指令輸入錯誤,該如何是好?就將他移除啊!利用 atq 與 atrm 吧!
範例一:查詢目前主機上面有多少的 at 工作排程?
linux-7xud:~ # atq
6 2009-05-28 09:23 a root <第六個工作將於 2009-05-28 09:23 執行 且該工作由root下達>
範例二:將上述的第 6 個工作移除!
linux-7xud:~ # atrm 6
linux-7xud:~ # atq
Syntax:
Management:
Sample:
沒有留言:
張貼留言