linux系統(tǒng)定時(shí)任務(wù)與延遲任務(wù)詳解
一、延遲任務(wù)(一次性)
比如:今天設(shè)置了延遲任務(wù),今天下午清理文件,延遲任務(wù)執(zhí)行了,明天就不會(huì)執(zhí)行,除非再設(shè)置一次
1.1 環(huán)境
[root@trade test1]# touch yan{1..3} [root@trade test1]# ls -l total 0 -rw-r--r--. 1 root root 0 Aug 29 10:50 yan1 -rw-r--r--. 1 root root 0 Aug 29 10:50 yan2 -rw-r--r--. 1 root root 0 Aug 29 10:50 yan3 [root@trade test1]# watch -n 1 ls -l /root/test1
監(jiān)控
1.2 創(chuàng)建延遲任務(wù)
開啟新窗口,在x時(shí)間清空掉/root/test1的文件
ctrl+d任務(wù)發(fā)起
[root@trade ~]# at 11:00 at> rm -fr /root/test1/*
ctrl+d生效后
at> <EOT> job 1 at 2022-08-29 11:00
11:00:00準(zhǔn)時(shí)清除掉該目錄下的文件
多個(gè)任務(wù),一行一行寫,寫完ctrl +d
或者這樣寫
單位也可以是1day
[root@trade ~]# at now+1min at> rm -fr /root/test1/*
at> <EOT> job 6 at 2022-08-29 13:21
1.3 查看任務(wù)列表
[root@trade ~]# at 11:05 at> touch /root/test1/ywq at> <EOT> job 3 at 2022-08-29 11:05
[root@trade ~]# at -l 3 2022-08-29 11:05 a root
1.4 查看任務(wù)內(nèi)容
很長,看最后一行,就知道任務(wù)內(nèi)容
[root@trade ~]# at -c 3
at -l
查到任務(wù)05分執(zhí)行,20分時(shí)任務(wù)執(zhí)行完成了
1.5取消任務(wù)內(nèi)容
[root@trade ~]# at -l 5 2022-08-29 13:30 a root
新版本這樣取消
[root@trade ~]# at -r 5
老版本這樣取消
[root@trade ~]# atrm 5
[root@trade ~]# at -l [root@trade ~]#
二、at命令黑白名單
默認(rèn)任意用戶都可以使用at命令
這樣首先安全性不高,其次任意用戶發(fā)起at命令會(huì)使得系統(tǒng)負(fù)載變高
系統(tǒng)中默認(rèn)存在黑名單
[root@trade ~]# ls -l /etc/at.deny -rw-r--r--. 1 root root 1 Jan 20 2012 /etc/at.deny [root@trade ~]# ls -l /etc/at.allow ls: cannot access /etc/at.allow: No such file or directory
寫法
[root@trade ~]# man 5 at.deny
有at.allow的時(shí)候,at.deny不生效
黑名單
[root@trade ~]# su - yan [yan@trade ~]$ at 13:40 at> ^C[yan@trade ~]$ logout [root@trade ~]# vim /etc/at.deny [root@trade ~]# cat /etc/at.deny yan [root@trade ~]# su - yan [yan@trade ~]$ at 13:40 You do not have permission to use at. [yan@trade ~]$ logout
[root@trade ~]# vim /etc/at.deny [root@trade ~]# cat /etc/at.deny [root@trade ~]# su - yan [yan@trade ~]$ at 13:40 at> ^C
白名單
有白名單,黑名單不生效
除了白名單的用戶和超級用戶可以使用at命令以外,所有用戶都不能使用at命令
[root@trade ~]# touch /etc/at.allow [root@trade ~]# su - oracle [oracle@trade ~]$ at now+1min You do not have permission to use at. [oracle@trade ~]$ logout [root@trade ~]# su - yan [yan@trade ~]$ at now+1min You do not have permission to use at. [yan@trade ~]$ logout
[root@trade ~]# vim /etc/at.allow [root@trade ~]# cat /etc/at.allow oracle [root@trade ~]# su - oracle [oracle@trade ~]$ at now+1min at> ^C[oracle@trade ~]$ logout [root@trade ~]# su - yan [yan@trade ~]$ at now+1min You do not have permission to use at. [yan@trade ~]$ logout
三、用戶級的定時(shí)任務(wù)(永久)
保證crond這個(gè)服務(wù)是開啟的(默認(rèn)情況下是開的)
rhel6
[root@trade ~]# service crond status crond (pid 21661) is running...
rhel7后
systemctl status crond.service
寫法:
man 5 crontab
0和7都表示周天
分鐘 小時(shí) 天 月 周
-u指定用戶,-e編輯
回車會(huì)就可以直接編輯了
[root@trade ~]# crontab -u root -e
每分鐘
* * * * * rm -fr /root/test1/*
用戶是你用什么用戶寫的crontab任務(wù)
wq保存后,保存到/var/spool/cron/用戶
[root@trade ~]# cat /var/spool/cron/root * * * * * rm -fr /root/test1/*
查看定時(shí)任務(wù)
[root@trade ~]# crontab -u root -l * * * * * rm -fr /root/test1/*
[root@trade ~]# touch /root/test1/yan{1..3}
撤銷掉用戶的所有定時(shí)任務(wù)
[root@trade ~]# crontab -u root -r [root@trade ~]# crontab -u root -l no crontab for root
刪掉的是這個(gè)文件
[root@trade ~]# ls /var/spool/cron/ [root@trade ~]#
每隔2min(分鐘)
*/2 * * * * rm -fr /root/test1/*
早上9點(diǎn)到下午5點(diǎn)(小時(shí))
*/2 09-17 * * * rm -fr /root/test1/*
每月1號到5號(天)
*/2 09-17 1,5 * * rm -fr /root/test1/*
只有4月(月)
*/2 09-17 1,5 4 * rm -fr /root/test1/*
只有周一(星期)
4月的1號和5號和4月的每一個(gè)周一早上09點(diǎn)到下午5點(diǎn)每隔2min執(zhí)行一次
*/2 09-17 1,5 4 1 rm -fr /root/test1/*
[root@trade ~]# crontab -u yan -e [root@trade ~]# ls /var/spool/cron/ root yan
[root@trade ~]# crontab -u root -e crontab: installing new crontab [root@trade ~]# crontab -u root -l * * * * * touch /root/test1/yan{1..3} [root@trade ~]# service crond stop Stopping crond: [ OK ]
[root@trade ~]# service crond start Starting crond: [ OK ]
每min創(chuàng)建一次,當(dāng)有了就不會(huì)創(chuàng)建,這個(gè)是上min創(chuàng)建的
四、用戶級crontab的執(zhí)行限制(黑白名單)
黑白名單不會(huì)影響超級用戶和系統(tǒng)級crontab
黑白名單其實(shí)和at是一樣的
默認(rèn)情況下所有用戶都可以使用crontab
[root@trade ~]# su - oracle [oracle@trade ~]$ crontab -e [root@trade ~]# su - yan [yan@trade ~]$ crontab -e
黑名單
[root@trade ~]# vim /etc/cron.deny [root@trade ~]# cat /etc/cron.deny oracle
[root@trade ~]# su - oracle [oracle@trade ~]$ crontab -e You (oracle) are not allowed to use this program (crontab) See crontab(1) for more information
但是用超級用戶下用oracle執(zhí)行crontab可以寫
[root@trade ~]# crontab -u oracle -e
[root@trade ~]# crontab -u oracle -l * * * * * touch /home/oracle/yan{1..3}
默認(rèn)情況下是沒有白名單
[root@trade ~]# ls -l /etc/cron.allow ls: cannot access /etc/cron.allow: No such file or directory
白名單
有白名單,黑名單就不生效
只有root和白名單的用戶允許,其它都不允許
[root@trade ~]# su - yan [yan@trade ~]$ crontab -e crontab: installing new crontab [yan@trade ~]$ logout [root@trade ~]# su - oracle [oracle@trade ~]$ crontab -e crontab: installing new crontab [oracle@trade ~]$ logout [root@trade ~]# touch /etc/cron.allow [root@trade ~]# echo yan > /etc/cron.allow [oracle@trade ~]$ cat /etc/cron.allow yan [root@trade ~]# su - yan [yan@trade ~]$ crontab -e crontab: installing new crontab [yan@trade ~]$ logout [root@trade ~]# su - oracle [oracle@trade ~]$ crontab -e You (oracle) are not allowed to use this program (crontab) See crontab(1) for more information
五、處理任務(wù)輸出
at命令和crontab執(zhí)行程序,有輸出的程序,輸出會(huì)以郵件的形式發(fā)送郵件的發(fā)起者
比如root發(fā)起at命令,在系統(tǒng)會(huì)生成以root身份給root發(fā)郵件
安裝郵件服務(wù)
postfix發(fā)郵件 mailx查看郵件
開啟postfix服務(wù)后就可以用mail查看郵件
dnf install postfix mailx -y systemctl enable --now postfix
沒有郵件
[root@server2 ~]# mail -uroot No mail for root
- 用mail給root發(fā)郵件
- Subject標(biāo)題
- 正文
- 正文出現(xiàn).
- 然后回車,郵件就發(fā)送了
[root@server2 ~]# mail root Subject: test adafa fsfes faf 。 . EOT
mail -u用戶 查看用戶的文件,查看的時(shí)候輸入數(shù)字,這個(gè)郵件內(nèi)容顯示出來
- 郵件其它指令help
- delete刪掉郵件
& delete 1 & quit [root@server2 ~]# mail -uroot No mail for root
快速刪掉郵件,把郵件文件清空掉
郵件文件在/var/spool/mail清空那個(gè)用戶寫那個(gè)用戶
[root@server2 ~]# > /var/spool/mail/root
[root@server2 ~]# crontab -u root -e * * * * * /bin/date
默認(rèn)情況會(huì)發(fā)送給root
這個(gè)文件寫了郵件發(fā)送給誰
[root@server2 ~]# vim /etc/crontab
如果不想給任何人發(fā)郵件,設(shè)定為空
這個(gè)文件是系統(tǒng)文件,重啟服務(wù)不行systemctl restart crond.service
方法二
立即生效
[root@server2 ~]# crontab -u root -e MAILTO='' * * * * * /bin/date
[root@server2 ~]# mail No mail for root
把MAILTO刪掉,配置文件還原
這樣它還是會(huì)發(fā)送文件
徹底取消郵件發(fā)送功能
[root@server2 ~]# vim /etc/sysconfig/crond
-m off 郵件功能關(guān)閉
[root@server2 ~]# systemctl restart crond.service
執(zhí)行了,mail 沒有郵件
[root@server2 ~]# cat /var/log/cron Aug 30 21:58:01 server2 CROND[3986]: (oracle) CMD (/bin/date)
[root@server2 ~]# mail No mail for root
更多參數(shù)
[root@server2 ~]# man crond
處理有輸出的走向,但是無論如何處理它的輸出都會(huì)在/var/log/cron產(chǎn)生
不想產(chǎn)生,把其輸出屏蔽掉,把輸出重定向
[root@server2 ~]# crontab -u oracle -e * * * * * /bin/date &> /dev/null
屏蔽郵件,但是屏蔽郵件后會(huì)有日志,徹底把指令輸出屏蔽,編寫crontab的時(shí)候,在執(zhí)行指令最后加上輸出重定向,讓它執(zhí)行指令的時(shí)候不要產(chǎn)生輸出,徹底杜絕輸出的出來
六、系統(tǒng)級cron的設(shè)定
系統(tǒng)級定時(shí)任務(wù)只有超級用戶可以做
[root@trade cron.d]# ls -ld /etc/cron.d drwxr-xr-x. 2 root root 4096 Aug 29 16:19 /etc/cron.d
一般用來對臨時(shí)文件管理
每天執(zhí)行的動(dòng)作,每小時(shí)執(zhí)行的動(dòng)作,每月執(zhí)行的動(dòng)作,每周執(zhí)行的動(dòng)作
寫個(gè)腳本,只需要將該腳本移到上面的目錄,就會(huì)每天、小時(shí)、月、周執(zhí)行一遍腳本
我把寫的腳本移動(dòng)/etc/cron.hourly下,那么我的腳本每小時(shí)就能執(zhí)行一次
[root@trade test]# vim test.sh [root@trade test]# cat test.sh #!/bin/bash rm -fr /root/test1/*
[root@trade test]# cp test.sh /etc/cron.hourly/ [root@trade test]# chmod +x /etc/cron.hourly/test.sh
如果想自己定義時(shí)間
每次執(zhí)行都是整點(diǎn)過1分,原因
前面寫的crontab都是整點(diǎn)過1分,比如寫的*****,12.00.01才執(zhí)行
[root@trade test]# cd /etc/cron.d [root@trade cron.d]# cat 0hourly SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ 01 * * * * root run-parts /etc/cron.hourly
自己寫一個(gè)
每分鐘以超級用戶的身份刪掉/root/test1
底下的內(nèi)容
和用戶級crontab相比配置文件多了用戶身份
[root@trade cron.d]# vim yan [root@trade cron.d]# cat yan * * * * * root rm -fr /root/test1/*
[root@trade oracle]# touch /root/test1/yan{1..3}
執(zhí)行成功
七、利用cron優(yōu)化臨時(shí)文件存儲(chǔ)
程序在使用臨時(shí)文件,把臨時(shí)文件處理掉,程序會(huì)出問題
(比如,你在餐館吃飯,碗筷類似臨時(shí)文件,你沒吃完,就不給用碗筷)
臨時(shí)文件有生命周期,在系統(tǒng)存在x時(shí)間后才能被清理
臨時(shí)目錄/tmp
,這里面的文件不會(huì)隨便消失,存在10天以上會(huì)被清理掉
因?yàn)橄到y(tǒng)中對臨時(shí)管理文件是有策略
在/lib/tmpfiles.d/
目錄中全是臨時(shí)文件的配置
里面有tmp.conf
第一列類型 第二列名稱 權(quán)限 所有人 所有組 生命周期,能看見/tmp里面的存在的東西超過10天會(huì)被清理掉
將上個(gè)實(shí)驗(yàn)的環(huán)境刪掉
[root@trade tmp]# cd /etc/cron.d/ [root@trade cron.d]# rm -fr yan
自己寫一個(gè)
類型 生成文件名稱 權(quán)限 所有人 所有組 臨時(shí)文件生命周期
自己寫必須.conf結(jié)尾
5s后這個(gè)臨時(shí)目錄里面的東西才能清理
[root@server2 tmpfiles.d]# vim /lib/tmpfiles.d/yan.conf [root@server2 tmpfiles.d]# cat yan.conf d /mnt/yan 1777 root root 5s
建立用create 清理用clean
systemd-tmpfiles
必須是超級用戶才能使用
root@server2 tmpfiles.d]# systemd-tmpfiles --create /lib/tmpfiles.d/yan.conf
[root@server2 mnt]# watch -n1 ls -l /mnt/yan
[root@server2 tmpfiles.d]# touch /mnt/yan/yan{1..3}
[root@server2 tmpfiles.d]# touch /mnt/yan/yan{3..5}
[root@server2 tmpfiles.d]# systemd-tmpfiles --clean /lib/tmpfiles.d/yan.conf
沒有過5s
[root@server2 tmpfiles.d]# touch /mnt/yan/yan{3..5} [root@server2 tmpfiles.d]# systemd-tmpfiles --clean /lib/tmpfiles.d/yan.conf
5s以后
[root@server2 tmpfiles.d]# systemd-tmpfiles --clean /lib/tmpfiles.d/yan.conf
每s/H自己去清理下系統(tǒng)的臨時(shí)文件(符合生命周期完成的臨時(shí)文件),用rm可能對系統(tǒng)造成損害,所以使用臨時(shí)文件清理指令更溫和點(diǎn)systemd-tmpfiles
必須是超級用戶才能使用
[root@server2 tmpfiles.d]# vim /etc/cron.d/yan [root@server2 tmpfiles.d]# cat /etc/cron.d/yan * * * * * root system-tmpfiles --clean /lib/tmpfiles.d/*.conf 01 * * * *
[root@server2 tmpfiles.d]# touch /mnt/yan/yan{3..5}
1min后
直接寫crontab也行(效果一樣)
[root@server2 cron.d]# rm -fr yan [root@server2 cron.d]# ls 0hourly
每min清理掉臨時(shí)文件(符合生命周期完成的臨時(shí)文件)
[root@server2 ~]# crontab -u root -e * * * * * systemd-tmpfiles --clean /lib/tmpfiles.d/*.conf
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
winxp apache用php建本地虛擬主機(jī)的方法
windows xp用php建本地虛擬主機(jī)的方法(注:以下目錄是筆者系統(tǒng)目錄)2009-07-07VSCode如何連接Linux遠(yuǎn)程服務(wù)器
這篇文章主要介紹了VSCode如何連接Linux遠(yuǎn)程服務(wù)器問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Centos下配置Redis開機(jī)啟動(dòng)腳本
本篇文章主要介紹了redis之Centos下配置Redis開機(jī)啟動(dòng)腳本,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02用rsync對網(wǎng)站進(jìn)行鏡像備份實(shí)現(xiàn)步驟
對系統(tǒng)管理員來說,平時(shí)的工作重心應(yīng)該集中在維護(hù)系統(tǒng)正常運(yùn)轉(zhuǎn),能夠正常提供服務(wù)上,這里往往牽涉到一個(gè)數(shù)據(jù)備份的問題2009-03-03linux 安裝pypy , virtualenv及使用方法
下面小編就為大家?guī)硪黄猯inux 安裝pypy , virtualenv及使用方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12Linux有限狀態(tài)機(jī)FSM的理解與實(shí)現(xiàn)
這篇文章主要幫助大家理解與實(shí)現(xiàn)Linux有限狀態(tài)機(jī)FSM,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06CentOs 7.*中配置安裝phpMyAdmin的完整步驟記錄
phpMyAdmin是一個(gè)以PHP為基礎(chǔ),以Web-Base方式架構(gòu)在網(wǎng)站主機(jī)上的MySQL的資料庫管理工具。下面這篇文章主要給大家介紹了關(guān)于CentOs 7.*中配置安裝phpMyAdmin的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧2018-07-07