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

tst8023ryq發表於2020-12-15

1.系統延時任務

[root@node4 tftpboot]# at 13:33               ##設定任務執行時間
warning: commands will be executed using /bin/sh
at> touch /mnt/westosfile{1..3}               ##任務動作
at> <EOT>                                     ##用 ctrl+D 發起任務
job 1 at Sun Nov  8 13:33:00 2020

at -r 任務號                                   ##取消任務執行
[root@node4 tftpboot]# at -l                  ##檢視任務列表
1	Sun Nov  8 13:33:00 2020 a root
[root@node4 tftpboot]# at -c 1                ##檢視任務內容
[root@node4 tftpboot]# dnf search mailx
[root@node4 tftpboot]# dnf install mailx.x86_64 -y
[root@node4 tftpboot]# dnf search postfix
[root@node4 tftpboot]# dnf install postfix.x86_64 -y
[root@node4 tftpboot]# systemctl enable --now postfix
[root@node4 tftpboot]# at now+1min               ##延時 1 分鐘
[root@node4 tftpboot]# at 13:42
warning: commands will be executed using /bin/sh
at> date
at> <EOT>
job 4 at Sun Nov  8 13:42:00 2020
[root@node4 tftpboot] mail -u root ##當任務有輸出時,輸出會以郵件的型是傳送給 at 任務的發起者,檢視超級使用者郵件
& 1              ##檢視第一封郵件
& headers 
> 1    root      Sun Nov  8 13:42  14/496   "Output from your job "
& delete 1
& headers     
No applicable messages
& q              ##退出

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

注意:當任務有輸出時,輸出會以郵件的型是傳送給 at 任務的發起者
例如使用date命令檢視時間時,當通過at指定date任務,該任務的輸出將會以郵件的形式傳送給該任務的發起者,而不會直接顯示,需要檢視相關郵件來獲得其輸出。另外,如果需要檢視郵件,則需要先安裝mailx和postfix服務,並開啟postfix服務。

2.at 任務的黑白名單

[root@node4 tftpboot]# cd 
[root@node4 ~]# su - westos
[westos@node4 ~]$ at now+1min
[root@node4 ~]# vim /etc/at.deny
[root@node4 ~]# su - westos
[westos@node4 ~]$ at now+1min
You do not have permission to use at.
[westos@node4 ~]$ logout
[root@node4 ~]# vim /etc/at.allow
[root@node4 ~]# su - westos
[westos@node4 ~]$ at now+1min
warning: commands will be executed using /bin/sh
at> ^C
[westos@node4 ~]$ logout
[root@node4 etc]# cat /etc/at.deny     
westos
                             ####系統中預設存在,在此檔案中出現的使用者不能執行 at
[root@node4 etc]# cat /etc/at.allow    
westos
                             ##系統中預設不存在,當檔案出現,普通使用者不能執行 at 
                             ##只有在白單中的使用者可以,並且/etc/at.deny 失效

注意:at.deny檔案在系統中是預設存在的,只是初始狀態下為空,即沒有指定哪些使用者不能使用at,如果將整個檔案刪除,將會導致使用者使用at時產生許可權錯誤。

3.系統定時任務

1.crontab 時間表示方式

 minute         0-59
 hour           0-23
 day of month   1-31
 month          1-12 (or names, see below)
 day of week    0-7 (0 or 7 is Sunday, or use names)
* * * * *       ##每分鐘
*/2 * * * *     ##每兩分鐘
*/2 09-17 * * * ##早 7-晚 5 每兩分鐘
*/2 */2 * * *   ##每隔 2 小時每兩分鐘
*/2 09-17 3,5 1 5 
*/2 09-17 * * 5  ##每週週五早 9 晚 5

2.系統控制 crontab 的服務

crond.service  ##當程式開啟時定時任務生效

3.crontab命令

crontab -e -u
crontab -l -u
crontab -r -u

[root@node4 ~]# crontab -e -u root  ##建立
38 14 * * * touch /mnt/file{1..10}  ##14點38分   分 小時  天 月 周
[root@node4 ~]# crontab -u root -l  ##檢視使用者級
38 14 * * * touch /mnt/file{1..10}
[root@node4 ~]# cd /var/spool/cron/
[root@node4 cron]# ls
root
[root@node4 cron]# cat root
38 14 * * * touch /mnt/file{1..10}

[root@node4 cron]# crontab -r -u root  ##取消超級使用者的任務
[root@node4 cron]# cat root
cat: root: No such file or directory

4.檔案方式設定定時任務

vim /etc/cron.d/file    ## cron.d是系統級
* * * * * username action
* * * * * root rm -fr /mnt/*

注意:採用系統級設定時,使用crontab -l無法檢視系統級的crontab任務

5.crontab 的黑白名單

/etc/cron.deny  ##系統中預設存在,在此檔案中出現的使用者不能執行 crontab
/etc/cron.allow ##系統中預設不存在,當檔案出現,普通使用者不能執行 crontab
                ##只有在名單中的使用者可以,並且/etc/at.deny 失效
                ##這兩個名單都不會影響/etc/cron.d/目錄中定時任務的發起及執行


[root@node4 Desktop]# vim /etc/cron.deny       ##系統中預設存在,在此檔案中出現的使用者不能執行 crontab
[root@node4 Desktop]# su - westos1
[westos1@node4 ~]$ crontab -e
You (westos1) are not allowed to use this program (crontab)
[westos1@node4 ~]$ logout
[root@node4 Desktop]# su - westos
[westos@node4 ~]$ crontab -e
no crontab for westos - using an empty one
[westos@node4 ~]$ logout
[root@node4 Desktop]# touch /etc/cron.allow    ##只有在名單中的使用者可以,並且/etc/at.deny 失效
[root@node4 Desktop]# vim /etc/cron.allow      ##系統中預設不存在,當檔案出現,普通使用者不能執行 crontab
[root@node4 Desktop]# su - westos1
[westos1@node4 ~]$ crontab -e
no crontab for westos1 - using an empty one
crontab: installing new crontab
[root@localhost cron.d]# su - westos  只有在白名單裡的可以
[westos@localhost ~]$ crontab -e
You (westos) are not allowed to use this program (crontab)
See crontab(1) for more information

4.系統中臨時檔案的管理方式

cd /usr/lib/tmpfiles.d/
vim westos.conf
d   /mnt/westos   777 root root 8s

systemd-tmpfiles --create /usr/lib/tmpfiles.d/*
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/*

[root@node4 Desktop]# cd /usr/lib/tmpfiles.d/ ## 臨時檔案儲存路徑
[root@node4 tmpfiles.d]# vim westos.conf      ##編輯檔案,建立任務
d /mnt/westos/ 777 root root 8s               ## 有效期 8s
[root@node4 tmpfiles.d]# systemd-tmpfiles  --create /lib/tmpfiles.d/westos.conf  ## 建立臨時檔案
[root@node4 tmpfiles.d]# touch /mnt/westos/westosfile1
[root@node4 tmpfiles.d]# touch /mnt/westos/westosfile2
[root@node4 tmpfiles.d]# systemd-tmpfiles  --clean /lib/tmpfiles.d/westos.conf  ## 清除臨時檔案

注意:設定完臨時檔案的存在週期後在該週期內無法用systemd-tmpfiles --clean命令清楚該檔案

相關文章