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命令,檔案被刪除