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

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

一,延遲任務 ctrl+d 發起任務 新建檔案用來測試,發起監控

[[email protected] ~]# mkdir /test
[[email protected] ~]# touch /test/test{1..6}
[[email protected] ~]# watch -n 1 'ls -l /test/*' (圖1)

(1)at 時間 在規定的時間完成任務

[[email protected] ~]# at 09:21 ##在09:21刪除/mnt/*
at> rm -fr /mnt/*

在這裡插入圖片描述

(2)ctrl+d 發起任務 是上面寫的任務開始執行

在這裡插入圖片描述

在這裡插入圖片描述

(3)at -r 任務編號 撤銷任務 在這裡插入圖片描述

(4)at now+1min 在接下來一分鐘執行此任務 (5)at -l 列出未執行的任務 (6)at -c 任務編號 檢視任務內容

(7)使用者的at許可權 1》at許可權的使用者黑名單(當沒有白名單時黑名單生效,當白名單存在時,黑名單失效,只有在白名單的使用者擁有at許可權) 黑名單:/etc/at.deny

[[email protected] ~]# cd /home
[[email protected] home]# ls
kiosk  student
[[email protected] home]#
 [[email protected]
~]# vim /etc/at.deny ##將student新增進黑名單 [[email protected] ~]#

切換使用者到student,執行at命令,不可執行

[[email protected] home]# su - student
Last login: Sat Nov  3 20:36:06 CST 2018 on pts/0
[[email protected] ~]$ at mow+1min
You do not have permission to use at.
[[email protected] ~]$  

切換使用者到kiosk,執行at命令,可執行

[[email protected] ~]$ su - kiosk
Password: 
Last login: Tue Nov  6 10:20:16 CST 2018 on :0
[[email protected] ~]$ at now+1min
at> touch file4
at> <EOT>
job 3 at Tue Nov  6 15:36:00 2018
[[email protected] ~]$ ls
Desktop    Downloads  Music     Public     Videos
Documents  file4      Pictures  Templates
[[email protected] ~]$ 

2》白名單 系統中不存在白名單,新建檔案作為白名單,此時黑名單失效。只有在白名單的使用者有at許可權 將student新增至白名單

[[email protected] ~]# touch /etc/at.allow
[[email protected] ~]# vim /etc/at.allow
[[email protected] ~]# 

分別用student和kiosk使用者使用at

[[email protected] ~]# su - student
Last login: Tue Nov  6 15:43:28 CST 2018 on pts/2
[[email protected] ~]$ at now+1min
at> touch file1
at> <EOT>
job 5 at Tue Nov  6 15:47:00 2018

[[email protected] ~]$ su - kiosk
Password: 
Last login: Tue Nov  6 15:35:04 CST 2018 on pts/2
[[email protected] ~]$ at now+1min
You do not have permission to use at.
[[email protected] ~]$ 

二、定時任務

1、linux 中的crond服務 crond服務通常被放在/etc/init.d/crond,這樣就可以在系統重啟後自動啟動crond服務。

[[email protected] ~]# cd /etc/cron.
cron.d/       cron.daily/   cron.hourly/  cron.monthly/ cron.weekly/

linux中的使用者使用contab命令來配置corn任務,crontab在/etc目錄下面存在cron.d, cron.daily,cron.weekly,cron.monthly,cron.hourly五個目錄和crontab檔案

cron.d:系統自動定期需要做的人物,但是又不是按小時,按天,按星期,按月來執行的,那麼就放在這個目錄下面,如果是按小時,按天,按星期,按月來執行的話,則可以放到相應的目錄下面 cron.daily是每天執行一次任務 cron.weekly是每週執行一次任務 cron.monthly是每月執行一次任務 cron.hourly是每小時執行一次任務

規定時間作規定的事 檔案寫入格式 1、使用者級的crond (1)開啟crond服務

 [[email protected] ~]# systemctl status crond.service 
crond.service - Command Scheduler
 Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
 Active: active (running) since Tue 2018-11-06 10:20:06 CST; 5h 58min ago
Main PID: 1439 (crond)
 CGroup: /system.slice/crond.service
         └─1439 /usr/sbin/crond -n

Nov 06 10:20:06 foundation68.ilt.example.com systemd[1]: ...
Nov 06 10:20:06 foundation68.ilt.example.com systemd[1]: ...
Nov 06 10:20:07 foundation68.ilt.example.com crond[1439]: ...
Nov 06 10:20:09 foundation68.ilt.example.com crond[1439]: ...
Hint: Some lines were ellipsized, use -l to show in full.
[[email protected] ~]# 

(2)檢視寫入格式

[[email protected] ~]# man 5 crontab

在這裡插入圖片描述

例如

*/2          10-13          *       2,5     3

每格2分鐘 10點-13點 每天 2月和5月 週三

(3)設定定時任務

[[email protected] ~]# crontab -u root -e
no crontab for root - using an empty one
crontab: installing new crontab
[[email protected] ~]# 

每天每時每分鐘都刪除mnt下的檔案,此處路徑必須時絕對路徑

* * * * *    rm -fr /mnt/*

(4)檢視指定使用者的定時任務

[[email protected] ~]# crontab -u root -l

* * * * * rm -fr /test/*

(5)普通使用者定時設定

[[email protected] ~]# touch /home/student/westos{1..6}
[[email protected] ~]# crontab -u student -e
no crontab for student - using an empty one
crontab: installing new crontab
[[email protected] ~]# 
* * * * *   rm -fr /home/student/*

(6)也可以在/var/spool/cron/使用者名稱 編輯定時任務

[[email protected] ~]# cat /var/spool/cron/root
[[email protected] ~]# vim /var/spool/cron/root 

* * * * *    rm -fr /mnt/*

(7)刪除指定使用者的定時任務

[[email protected] ~]# crontab  -u student -r
[[email protected] ~]# crontab  -u student -l
no crontab for student
[[email protected] ~]#

(8)使用者的crontab許可權黑白名單(與使用者的at許可權的黑白名單相似) 1》使用者的crontab許可權黑名單 將student使用者新增進黑名單

  [[email protected] ~]# vim /etc/cron.deny 
   [[email protected] ~]# 

切換至student使用者

[[email protected] ~]$ crontab -e
You (student) are not allowed to use this program (crontab)
See crontab(1) for more information
[[email protected] ~]$ 

切換至kiosk使用者,有crontab許可權

  [[email protected] ~]$ su - kiosk
Password: 
Last login: Tue Nov  6 15:49:39 CST 2018 on pts/2
[[email protected] ~]$ crontab -e
no crontab for kiosk - using an empty one
crontab: no changes made to crontab
[[email protected] ~]$ 

2》使用者的crontab許可權白名單 新建白名單檔案,將student新增進白名單,此時黑名單失效

[[email protected] ~]# touch /etc/cron.allow
[[email protected] ~]# vim /etc/cron.allow
[[email protected] ~]# 

分別切換至student使用者和kiosk使用者

[[email protected] ~]# su - student
Last login: Tue Nov  6 17:06:37 CST 2018 on pts/2
[[email protected] ~]$ crontab -e
crontab: no changes made to crontab
[[email protected] ~]$ su - kiosk
Password: 
Last login: Tue Nov  6 17:07:26 CST 2018 on pts/2
[[email protected] ~]$ crontab -e
You (kiosk) are not allowed to use this program (crontab)
See crontab(1) for more information
[[email protected] ~]$ 

可以看出,由於student在白名單而kiosk沒有在白名單,因此student使用者有crontab許可權,kiosk沒有

2、系統級的crond

(1)系統級的crond檔案都在/etc/cron.d 在/etc/cron.d目錄下建立檔案寫入定時內容(內容需要註名使用者)設定系統定時任務

[[email protected] ~]# cd /etc/cron.
cron.d/       cron.daily/   cron.hourly/  cron.monthly/ cron.weekly/
[[email protected] ~]# cd /etc/cron.d
[[email protected] cron.d]# ls
0hourly  raid-check  sysstat
[[email protected] cron.d]# 

建立檔案寫入定時內容(內容需要註名使用者)設定系統定時任務

[[email protected] cron.d]# vim westos
[[email protected] cron.d]# 

寫入內容

33 21 * * *  root rm -fr /test/*  

設定21:33刪除/test/下的檔案,在21:30時建立檔案並關機, (2)控制系統中的臨時檔案 臨時檔案所在目錄/usr/lib/tmpfiles.d/

[[email protected] cron.d]# cd /usr/lib/tmpfiles.d/
[[email protected] tmpfiles.d]# ls
abrt.conf                 mdadm.conf           setroubleshoot.conf
etc.conf                  pam.conf             spice-vdagentd.conf
gvfsd-fuse-tmpfiles.conf  ppp.conf             subscription-manager.conf
httpd.conf                python.conf          systemd.conf
initscripts.conf          radvd.conf           systemd-nologin.conf
iscsi.conf                rpcbind.conf         tmp.conf
legacy.conf               rpm.conf             tuned.conf
libselinux.conf           samba.conf           var.conf
libstoragemgmt.conf       sap.conf             x11.conf
lvm2.conf                 selinux-policy.conf

檔案tmp.conf寫明瞭臨時檔案定時管理的格式

[[email protected] tmpfiles.d]# vim tmp.conf 
[[email protected] tmpfiles.d]# 

新建臨時檔案d的管理目錄

[[email protected] tmpfiles.d]# vim test.conf
[[email protected] tmpfiles.d]#

d /test/ 777 root root 8s 目錄/test/下的檔案在系統中存在8s [[email protected] test]# watch -n 1 ‘ls -l /test/’ 此時監控無資料 在這裡插入圖片描述

在目錄下建立檔案

建立目錄test.conf [[email protected] test]# systemd-tmpfiles --create /usr/lib/tmpfiles.d/* 在這裡插入圖片描述

清理失效的檔案 [[email protected] test]# systemd-tmpfiles --clean /usr/lib/tmpfiles.d/*