1. 程式人生 > >【linux】系統延時任務及定時任務

【linux】系統延時任務及定時任務

1.系統延時任務

1. at命令的使用

at time          //設定任務執行時間
rm -fr /mnt/*    //任務動作
ctrl+D           //發起任務

在這裡插入圖片描述
watch -n 1 ls /mnt開啟一個監控視窗
原本/mnt目錄下有10個檔案,在01:04分執行rm -fr /mnt/* 的命令
在這裡插入圖片描述
時間一到,/mnt目錄下的檔案被刪除。

at now+1min      //延時1分鐘
rm -fr /mnt/*    //任務動作
ctrl+D           //發起任務    
這裡任務的執行是正點正分,比如01:03:45發起任務,執行是01:04:00

在這裡插入圖片描述

at -l                 //檢視任務列表
at -c 任務號          //檢視任務內容
at -r 任務號          //取消任務執行

【注意1】
當任務有輸出時,輸出會以郵件的形式傳送給at任務的發起者

mail -u root   //檢視超級使用者的郵件
1              //檢視第一封郵件
q              //退出

在這裡插入圖片描述
延時1分鐘執行echo hello python在這裡插入圖片描述
超級使用者收到郵件,內容為執行任務的輸出結果

> /var/spool/mail/root   //清空郵件

在這裡插入圖片描述
郵件沒清空之前還能看到任務執行的輸出結果hello python,清空之後再cat,為空。
2. at任務的黑白名單

/etc/at.deny   //系統中預設存在,在此檔案中出現的使用者不能執行at

在這裡插入圖片描述
在黑名單中寫下student使用者
在這裡插入圖片描述


切換到student使用者,執行at命令,許可權受制。

/etc/at.allow  //系統中預設不存在,如果出現該檔案,則普通使用者不能執行at,只有在名單中出現的使用者才可以。同時  /etc/at.deny失效。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

2. 定時任務

大部分系統管理工作都是通過定期自動執行某個指令碼來完成的,而cron功能即可幫助我們定期執行指令碼。

systemctl start crond  //開啟服務

1. crontab時間表達方式

crontab -u //表示指定某個使用者,不加-u選項則為當前使用者
crontab -e //表示制定計劃任務
crontab -l //表示列出計劃任務
crontab -r //表示刪除計劃任務

2. 發起任務編寫命令格式

分 時 日 月 周 命令(最好用絕對路徑)
比如:
 *  * * * *    rm -fr /mnt/*          //每分鐘執行一次對/mnt目錄下檔案的刪除
*/2 * * * *    rm -fr /mnt/*          //每隔兩分鐘執行一次
*/2 08-17 1,15 3-5 3 rm -fr /mnt/*  //在3-5月的每週三的1號和15號的8點到17點每隔兩分鐘執行

方法一:
使用crontab -e來編寫任務計劃,實際上是使用vim工具打開了crontab的配置檔案/var/spool/cron/username檔案。(如果使用者是root,則開啟的是/var/spool/cron/root)開啟這個檔案使用了vim,所以儲存時在命令列模式下輸入wq即可。
操作步驟如下:
1)開啟監控:watch -n 1 ls -l /mnt
2)發起任務 crontab -u root -e
3)編輯內容為*/2 * * * * rm -fr /mnt/*
在這裡插入圖片描述任務發起。檔案沒有被改動前,/mnt目錄下還有5個檔案
在這裡插入圖片描述每隔兩分鐘執行任務,檔案被改動後,/mnt目錄下無檔案。
方法二: 在/etc/cron.d目錄下,建立一個檔案westos。編輯檔案,內容為*/2 * * * * root rm -fr /mnt/*
與crontab -e類似,但要指定使用者
方法三:
echo "*/2 * * * * root rm -fr /mnt/* >/etc/cron.d/username

3. 臨時檔案建立與刪除

系統中服務在正常執行時會產生臨時檔案,存放目錄是/usr/lib/tmpfiles.d,系統臨時檔案的配置檔案是/usr/lib/tmpfiles.d/.conf*

systemd-tmpfiles --create /usr/lib/tmpfiles.d/*  //建立臨時檔案
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/* //刪除臨時建立的已存留5s的檔案,時間不夠的沒有影響

下面我們自己實現一下,如何清理臨時檔案。

cd /usr/lib/tmpfiles.d  
//這個目錄存放了系統產生的臨時檔案以及這些臨時檔案的配置檔案
//name.conf都是配置檔案
vim potizo.conf   //我們寫一個處理臨時檔案potizo的配置檔案

編輯內容如下:
在這裡插入圖片描述
其中d表示檔案型別,/mnt/potizo是對哪個檔案執行,777表示對檔案授予許可權為滿,兩個root分別為屬主屬組,表示以root使用者root組的身份執行,5s表示時間。這一句配置內容意思是在5s後刪除/mnt/potizo目錄下的檔案。
【注意】在自己建立臨時檔案的配置檔案時一定要以.conf結尾。
操作步驟如下:
1)先在/usr/lib/tmpfiles.d目錄下vim potizo.conf,並編輯內容

在這裡插入圖片描述
2)切換到/mnt下執行臨時檔案的配置
在這裡插入圖片描述
3)ls檢視要執行的目錄
在這裡插入圖片描述
4)ll檢視檔案許可權開頭的d表示配置成功
在這裡插入圖片描述
5)切換到potizo下,建立檔案,並ll檢視是否建立成功
在這裡插入圖片描述
6)執行清理臨時檔案的命令
7)ls檢視建立的檔案是否清理成功,是否按照規定時間才開始執行清理
在這裡插入圖片描述