當我們在使用linux系統的時候通常會遇到一些需要在未來的某個時刻運行系統的某些功能,這個時候我們就需要定製一些未來能夠完成的任務了。定義系統能夠在未來的某一時刻完成某些功能的任務,我們稱之爲任務計劃。
通常任務計劃分爲兩種情況,其一是在未來的某個時間點執行一次某個任務;另外一種情況就是能夠週期性的執行某些任務。那在這裏我們就用到了at,bacth,和cron命令了。
at和batch能夠實現在未來的某個時間點執行一次某個任務、而cron則能夠實現週期性的完成某些工作;
一、在未來的某個時間點執行一次某個任務。
at命令能夠實現在未來的某個時刻執行一次某個任務,並且在完成任務之後以郵件的形式通知給用戶。
那麼接下來我們就詳細的說一下這些命令的具體用法:
at 時間 指定時間
at> COMMAND 指定未來某個時間點的命令動作
at> Ctrl+d 提交定時任務
那麼定製玩任務之後如何查看能:
我們使用at -l 命令查看做好的定時任務:
那麼這裏指定的時間有沒有什麼規則呢?
指定時間:
絕對時間:HH:MM, DD.MM.YY MM/DD/YY
相對時間:now+#
單位:minutes, hours, days, weeks
模糊時間:noon, midnight, teatime
那麼當我們定製完任務之後的某一天突然發現我們不需要在未來執行這件任務的時候該如何撤銷自己已經定製的任務呢?
這裏就用到了-d選項
at -d AT_JOB_ID at -d 跟上定製任務的id號即可撤銷任務
batch與at非常類似,不同的是batch不需要指定時間,batch會自動的在系統空閒的時候完成某些定製任務。
當系統用戶定製了很多在同一時刻運行的at任務,那麼系統在那一刻就會非常的忙碌,這樣就會造成系統資源的分配不均衡。我們在定義at的時候同時也定義了黑白名單,/etc/at.allow(白名單)和/etc/at.deny(黑名單),這樣既可定義能夠使用at命令的用戶羣,剔除那些惡意使用at命令佔用系統資源的用戶。當黑白名單同時存在的時候,系統以白名單爲準,當黑白名單同時不存在的時候,系統則只允許root用戶使用at命令。
二、週期性的執行某個任務
cron自身是一個能夠不間斷運行的服務,但這僅適用於服務器中,爲此而推出了cron命令的補充命令anacron,anacron能夠實現讓cron因爲各種原因在過去的時間該執行而未執行的任務在恢復正常執行一次;
cron本身又分爲系統任務和用戶任務兩種。
系統cron任務:
/etc/crontab中,共分爲七個字段
分鐘 小時 天 月 周 用戶 任務
用戶cron任務:
/var/spool/cron/USERNAME,共分爲六個字段
分鐘 小時 天 月 周 任務
和at一樣,cron也有自己的時間有效取值範圍:
分鐘:0-59
小時:0-23
天:1-31
月:1-12
周:0-7,0和7都表示週日
那麼我們可以通過cron -e命令來編輯和配置用戶任務:
分鐘 小時 天 月 周 任務
* * * * * *
其中*表示對應所有的有效取值
3 * * * * cat /etc/inittab 表示每小時的第三分鐘查看一下inittab文件
10,40 02 * * 2,5 cat /etc/inittab 表示沒週二週五的兩點十分和兩點四十分查看一下inittab文件,其中的”,”表示離散時間點。
*/3 * * * * reboot 表示每三分鐘重啓一次系統這裏的”/”表示取值範圍內的每多久一次
PS:需要注意的是cron的環境變量都需要到PATH環境變量指定的路徑下去查找,因此需要注意。
用戶任務的管理:
crontab
-l: 列出當前用戶的所有cron任務
-e: 編輯
-r: 移除所有任務
-u USERNAME: 管理其用戶的cron任務