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/*