Linux计划任务(at,crontab)
在LINUX中,我們通過crontab和at這兩個東西來實現(xiàn)
at:它是一個可以處理僅執(zhí)行一次就結(jié)束的指令
crontab:它是會把你指定的工作或任務(wù),比如:腳本等,按照你設(shè)定的周期一直循環(huán)執(zhí)行下去
1.at計劃任務(wù)的使用
語法格式: at 時間
服務(wù):atd
開啟atd服務(wù)
對應(yīng)的查看atd服務(wù),如果沒有啟動則啟動
使用at創(chuàng)建計劃任務(wù)
at -l 查看計劃任務(wù)
atq 查看計劃任務(wù)
at計劃任務(wù)的特殊寫法
對于系統(tǒng)來說 :計劃任務(wù) 就是在某個特定的時刻 執(zhí)行一個腳本文件
創(chuàng)建成功的at計劃任務(wù)會在/var/spool/at/目錄下成生一個可執(zhí)行的腳本文件
每一個腳本都對應(yīng)一個at計劃任務(wù)
刪除at計劃任務(wù)
atrm 命令
atrm + 計劃任務(wù)的編號
2.crontab定時任務(wù)的使用
crond命令定期檢查是否有要執(zhí)行的工作,如果有要執(zhí)行的工作便會自動執(zhí)行該工作
cron是一個linux下的定時執(zhí)行工具,可以在無需人工干預(yù)的情況下運行作業(yè)。
linux任務(wù)調(diào)度的工作主要分為以下兩類:
.系統(tǒng)執(zhí)行的工作:系統(tǒng)周期性所要執(zhí)行的工作,如備份系統(tǒng)數(shù)據(jù)、清理緩存. 例如/tmp 臨時目錄
.個人執(zhí)行的工作:某個用戶定期要做的工作,由每個用戶自行設(shè)置。
啟動服務(wù)
systemctl status crond # (查看crond服務(wù)的狀態(tài))systemctl restart crond # 重啟 systemctl enable crond # 開機自啟cron命令參數(shù)介紹:
crontab的參數(shù):
crontab -u #指定某個用戶的cron服務(wù)
crontab -l #列出cron服務(wù)的詳細(xì)內(nèi)容
crontab -r #刪除cron服務(wù)
crontab -e #編輯cron服務(wù)
例如:
crontab -u root -l # root查看自己的cron計劃任務(wù)
crontab -u san -r # root想刪除san的cron計劃任務(wù)
特殊符號的含義
| * | 代表取值范圍內(nèi)的數(shù)字 | (任意) |
| / | 代表”每” | */10 |
| - | 代表從某個數(shù)字到某個數(shù)字 | 6-18 |
| , | 分開幾個離散的數(shù)字 | 6,18 |
我們可用crontab -e命令來編輯計劃任務(wù)
編輯的是/var/spool/cron下對應(yīng)用戶的cron文件
crontab的計劃任務(wù)內(nèi)容保存在目錄/var/spool/cron下面
編輯計劃任務(wù)
crontab -u root -e也可以直接在/etc/crontab中添加計劃任務(wù)
cron服務(wù)每分鐘不僅要讀一次/var/spool/cron內(nèi)的所有文件,還需要讀一次/etc/crontab
因此我們配置這個文件也能運用cron服務(wù)做一些事情。
用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統(tǒng)的任務(wù)
編輯/etc/crontab 配置文件 (說明)
SHELL=/bin/bash #變量的值指定shell 環(huán)境(此處默認(rèn)為 bash shell);
PATH=/sbin:/bin:/usr/sbin:/usr/bin # PATH 變量定義用來執(zhí)行命令的程序路徑;
MAILTO=root //如果出現(xiàn)錯誤,或者有數(shù)據(jù)輸出,數(shù)據(jù)作為郵件發(fā)給這個帳號
系統(tǒng)級別的計劃任務(wù)
對于系統(tǒng)級別的計劃任務(wù),需要執(zhí)行的命令和腳本都放在這里:
/etc/cron.* 按兩次tab
目錄作用解釋:
cron.d/ #是系統(tǒng)自動定期需要做的任務(wù),但是又不是按小時,按天,按星期,按月來執(zhí)行的,那么就放在這個目錄下面。
cron.deny #控制用戶是否能做計劃任務(wù)的文件;
cron.monthly/ #每月執(zhí)行的腳本;
cron.weekly/ #每周執(zhí)行的腳本;
cron.daily/ #每天執(zhí)行的腳本;
cron.hourly/ #每小時執(zhí)行的腳本;
crontab #主配置文件 也可添加任務(wù);
anacron
cron用控制循環(huán)執(zhí)行例行性工作。如果我要設(shè)定機器每早8點進行備份服務(wù)。除非我機器保證在8點這個時間點不會關(guān)機,如果關(guān)機了,cron中的腳本,在下次開機將不會被執(zhí)行。
anacron并沒有取代cron的意思,anacron用于機器重啟后,會偵測停機期間,有沒有cron沒有執(zhí)行的計劃任務(wù),如果有,會立即執(zhí)行一下沒有執(zhí)行的任務(wù)。
注意事項
每條任務(wù)調(diào)度執(zhí)行完畢,系統(tǒng)都會將任務(wù)輸出信息通過電子郵件的形式發(fā)送給當(dāng)前系統(tǒng)用戶,這樣日積月累,日志信息會非常大,可能會影響系統(tǒng)的正常運行,因此,將每條任務(wù)進行重定向處理非常重要
當(dāng)crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或者查看日志看某個job有沒有執(zhí)行/報錯tail -f /var/log/cron。
在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉(zhuǎn)義\%,如經(jīng)常用的date ‘+%Y%m%d’在crontab里是不會執(zhí)行的,應(yīng)該換成date ‘+\%Y\%m\%d’
?
將一個月中10天的日志歸檔
#!/usr/bin/env bash #[-d $PWD/file] && mkdir -p $PWD/file &&exit 1 data='/usr/local/src/log' cd $data date_d=`date +%d` result=$[date_d/10] result=0 date_m=`date +%Y%m` if [ $result -eq 0 ] thennum=01nowdate=`date +%Y-%m-01` #本月第一天enddate=`date -d "last day $nowdate" +%Y-%m-%d` #上個月最后一天startdate=`date -d "$enddate" +%Y-%m-21`end_day=`date -d "$enddate" +%d`start_day=`date -d "$startdate" +%d`dayDiff=$[end_day-start_day+1] fiif [ $result -eq 1 ] thennum=02startdate=`date +%Y-%m-01`dayDiff=10fiif [ $result -eq 2 ] thennum=03dayDiff=10startdate=`date +%Y-%m-11` fitargit_dir=${date_m}${num} echo $targit_dir if [ ! -d $targit_dir ];thenmkdir $targit_dir fi for i in `seq $dayDiff` dofind /usr/local/src -name "access.log-$startdate-*" 2> /dev/null -exec mv {} $data/$targit_dir \; # find /usr/local/src -name "access.log-$startdate-*"startdate=`date -d "+1 day $startdate" +%Y-%m-%d` done tar jcf $targit_dir.tar.bz2 $targit_dir if [ $? -eq 0 ];thenrm -fr $targit_dir fi?
?
轉(zhuǎn)載于:https://www.cnblogs.com/flyhgx/p/6367978.html
總結(jié)
以上是生活随笔為你收集整理的Linux计划任务(at,crontab)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 破解并配置WebStorm
- 下一篇: 数组追加数组,小程序数组里面追加数组如何