2010年1月8日 星期五

[Linux] Commands

摘錄自: 例行性命令的建立 - 鳥哥的 Linux 私房菜

at - 執行一次性的工作
下面這個例子表示五分鐘後顯示 Hello 訊息,但要注意的是:
  1. 有 standard I/O 執行時不會在終端機顯示,而是用 email 的方式告訴執行者。(應該是避免未來執行時終端機有其他工作在顯示訊息,會互相干擾吧?)
  2. 指令中如果有檔案或資料夾相關的操作,最好使用絕對路徑,因為指令的下達與 PATH 變數有關, 同時與當時的工作目錄也有關連。
at now + 5 minutes
at> echo "Hello"
at> <EOT> <==這裡輸入 [ctrl] + d 就會出現 的字樣!代表結束!
這個工作會被存在 /var/spool/at/ 中,等待適當的時間點執行。可用 atq 查詢目前已存在的工作,用 atrm 刪除某個工作。
/etc/at.allow/etc/at.deny 可以設定能執行 at 指令的使用找白名單與黑名單。
註:batch 指令讓 CPU 工作負載小於 0.8 時才執行背景任務,需要時再研究。

crontab - 例行性工作
這個例子會固定在每天 12 點寄信給 evelyn 這個 linux 使用者,信的內容是 .bashrc 檔案。
crontab -e
# 此時會進入 vi 的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
0 12 * * * mail evelyn -s "subject: at 12:00" < /home/dmtsai/.bashrc
下 crontab 指令要做的工作會被記錄到 /var/spool/cron/執行者帳號 中,該檔不要用 vi 直接編輯,會爛掉。要新增/修改/刪除指令也是同樣用 crontab -e 進入指令檔案修改。crontab -l 可以看目前放在 crontab 中的工作內容。
/etc/cron.allow/etc/cron.deny 可以設定能執行 cron 指令的使用找白名單與黑名單。
若是系統的例行性工作,則可以直接用 vim 編輯存在 /etc/crontab 的這個檔。(需要時再看)
cron 會每分鐘去讀取一次 /etc/crontab/var/spool/cron 裡面的資料內容來執行,因此更新後很快就能生效。
註:其他還有工作資源分配的問題(避免在同一個時間一起執行例行工作)、喚醒停機期間的工作任務(anacron),等需要再看。