程式扎記: [Linux 命令] at ( 單一工作排程設定 )

標籤

2010年11月11日 星期四

[Linux 命令] at ( 單一工作排程設定 )

Source (VBird) 
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 的工作情況其實是這樣的: 

1. 先找尋 /etc/at.allow 這個檔案,寫在這個檔案中的使用者才能使用 at ,沒有在這個檔案中的使用者則不能使用 at (即使沒有寫在 at.deny 當中);
2. 如果 /etc/at.allow 不存在,就尋找 /etc/at.deny 這個檔案,若寫在這個 at.deny 的使用者則不能使用 at ,而沒有在這個 at.deny 檔案中的使用者,就可以使用 at 咯;
3. 如果兩個檔案都不存在,那麼只有 root 可以使用 at 這個指令。

透過這個說明,我們知道 /etc/at.allow 是管理較為嚴格的方式,而 /etc/at.deny 則較為鬆散 (因為帳號沒有在該檔案中,就能夠執行 at 了)。在一般的 distributions 當中,由於假設系統上的所有用戶都是可信任的, 因此系統通常會保留一個空的 /etc/at.deny 檔案,意思是允許所有人使用 at 指令的意思 (您可以自行檢查一下該檔案)。 不過,萬一你不希望有某些使用者使用 at 的話,將那個使用者的帳號寫入 /etc/at.deny 即可! 一個帳號寫一行。 

單一工作排程的進行就使用 at 這個指令囉!這個指令的運作非常簡單!將 at 加上一個時間即可!基本的語法如下: 
[root@www ~]# at [-mldv] TIME
[root@www ~]# at -c 工作號碼
選項與參數:
-m :當 at 的工作完成後,即使沒有輸出訊息,亦以 email 通知使用者該工作已完成。
-l :at -l 相當於 atq,列出目前系統上面的所有該使用者的 at 排程;
-d :at -d 相當於 atrm ,可以取消一個在 at 排程中的工作;
-v :可以使用較明顯的時間格式列出 at 排程中的工作列表;
-c :可以列出後面接的該項工作的實際指令內容。

TIME:時間格式,這裡可以定義出『什麼時候要進行 at 這項工作』的時間,格式有:
HH:MM ex> 04:00
在今日的 HH:MM 時刻進行,若該時刻已超過,則明天的 HH:MM 進行此工作。
HH:MM YYYY-MM-DD ex> 04:00 2009-03-17
強制規定在某年某月的某一天的特殊時刻進行該工作!
HH:MM[am|pm] [Month] [Date] ex> 04pm March 17
也是一樣,強制在某年某月某日的某時刻進行!
HH:MM[am|pm] + number [minutes|hours|days|weeks]
ex> now + 5 minutes ex> 04pm + 3 days
就是說,在某個時間點『再加幾個時間後』才進行。


範例一:再過五分鐘後,將 /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: 
 

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!