1. 程式人生 > >Linux系統定時任務及延時任務

Linux系統定時任務及延時任務

一.延時任務:

1.at    命令

at  命令可以指定某一任務在將來的特定時間執行。

at  時間     延時任務
ctrl+d         任務發起
at -l            檢視任務
at -c           檢視任務內容
at -r            取消任務
測試:
先在/mnt/下建立10個檔案,然後輸入watch -n 1 ls -l /mnt/  監控命令

重新開啟一個終端執行以下操作:
at now+2min          延時2分鐘       
at> rm-fr /mnt/*       執行的內容

ctrl+d                       發起任務


at -l                          檢視當前延時任務


at -c  任務號           檢視任務內容

時間到,檔案被刪除


at -r  任務號                        取消任務,取消任務後,at -l檢視不到該任務

2.延時任務黑白名單:
/etc/at.deny    使用者黑名單,系統本身存在的檔案,在此黑名單下的使用者不可以執行延時任務
/etc/at.allow   使用者白名單,系統本身不存在此檔案,需要建立,當此檔案被建立後,預設所有使用者都是黑名單,只有在此檔案下的使用者才能執行延時任務,且如果使用者白名單與使用者黑名單同時存在一個使用者,使用者黑名單失效。
root使用者對以上兩個檔案免疫。
測試:先在liming下建立延時任務,可以建立,然後把liming加入到使用者黑名單,再用liming建立延時任務,不可以建立。然後touch /etc/at.allow  建立延時任務白名單,用其他使用者(除了root)嘗試建立延時任務,不可以建立,然後在白名單下新增liming任務,用liming建立延時任務,可以建立。黑名單也有liming,但是黑名單liming已失效

 

二.定時任務

1.定時任務:

crontab   定時任務是永久的,要寫到檔案裡
systemctl status crond.service   ,檢視定時任務屬性


crontab -e   編輯定時任務,如果不加使用者,則表示root使用者,man  5  crontab檢視檔案書寫格式
*     *     *     *     *      rm  -rf   /mnt/*   每一天的每一分鐘都刪除/mnt/下的檔案和目錄

*/2    *    *    *    *    每一天的每兩分鐘
*/2    09,17     *     *     *  每個月的17點和9點每兩分鐘
*/2    09-17     *     *     *  每個月的9點到17點每兩分鐘
*/2    09-17     *     *     2  每個月的週二的9點到17點每兩分鐘
*/2    09-17     1,15     *     2 每個月的1號和15號以及週二的9點到17點每兩分鐘
*/2    09-17     1,15     7    2 7月的1號和15號以及週二的9點到17點每兩分鐘

 

crontab -u root -l    檢視root的定時任務
crontab -u liming -l  檢視liming的定時任務,
crontab -u root -r    刪除root的定時任務

crontab -u liming -e   編輯liming的定時任務
crontab -u liming -l   檢視liming的定時任務
crontab -u liming -r   刪除liming的定時任務

測試:

2.定時任務黑白名單

  /etc/cron.deny    黑名單,系統本身存在的檔案,在此黑名單下的使用者不可以執行延時任務
  /etc/cron.allow   白名單,系統本身不存在此檔案,需要建立,當此檔案被建立後,預設所有使用者都是黑名單,只有在此檔案下的使用者才能執行延時任務,且如果使用者白名單與使用者黑名單同時存在一個使用者,使用者黑名單失效。
root使用者對以上兩個檔案免疫。
測試:先切換到liming使用者,然後crontab -e,可以進入編輯檔案。

切換到root將liming新增到黑名單(vim /etc/cron.deny)

切換到liming ,crontab -e 不可以進入編輯檔案。

切換到root建立白名單(touch /etc/cron.allow),預設全使用者為黑,除了root外。然後將liming新增到白名單,(vim /etc/cron.allow),切換到liming,crontab -e 可以進入編輯檔案。黑名單中的liming失效。

但是即使liming不在白名單下,也可以在root下crontab -u liming -e   進入編輯檔案,因為root使用者操作,不受以上兩個檔案的限制。

3.系統級定時任務

屬於系統的定時任務通常儲存在/etc/crontab檔案中而不是使用crontab -e 編輯儲存在個人檔案中。更好的做法是使用文字編輯器建立crontab檔案並儲存到/etc/cron.d中(避免更新系統軟體包cronie時出現問題)。/etc/cron.d/crontab檔案在日期說明後另加一個欄位,表示將執行作業的使用者。對於需要每天 每週或每月執行一次的指令碼,可以直接將其設定為可執行檔案,並儲存在/etc/cron{daily,weekly,monthly}中相應目錄下。

在/etc/cron.d/目錄下,可以建立系統級定時任務檔案,檔案格式為:

*         *         *         *         *         root      rm  rf  /mnt/*

之所以在/etc/cron.d/下建立的檔案可以定時,是因為開啟了crond服務,如果關掉服務,就不會執行定時任務
 1.cd /etc/cron.d
 2.vim westos  建立檔案並寫入  * * * * *   root   rm -rf /mnt/*
 3.touch /mnt/file{1..3}


 

如果我們的Linux主機是24全天全年的處於開機狀態,我們只需要atd與crond這兩個服務即可,如果我們的伺服器並非24小時無間斷的啟動,那麼我們就需要anacron的幫助了。

anacron並不能取代cron去執行某項任務,而是以天為單位或者是在啟動後立刻進行anacron的動作,它會去偵測停機期間應該進行但是並沒有進行的crontab任務,並將該任務執行一遍後,anacron就會自動停止了。

4.系統臨時檔案建立

檔案都是需要空間的,都是需要佔用記憶體的,如果我們想要定期清除一些不需要的檔案,我們就需要建立一個臨時檔案

 1.cd /usr/lib/tmpfiles.d/ --> ls   此目錄下都是系統臨時檔案,隨便開啟一個,看格式如何寫,vim tmp.conf
 2.在tmpfiles.d目錄下建立一個臨時檔案,vim westos.conf,編輯如下:
  d /mnt/westos 777 root root 8s   此命令的意思是每8秒清除一次/mnt/westos/下的檔案。
 3.systemd-tmpfiles --create /usr/lib/tmpfiles.d/*
 4.systemd-tmpfiles --clean /usr/lib/tmpfiles.d/*  當檔案超過8秒後,執行此命令,檔案會被刪除,若沒有超過8秒,那麼檔案不會被刪除。
監控命令: watch -n 1 ls -lR /mnt/

超過8秒執行clean命令,檔案被刪除