計劃任務簡單來說是一個我們規定的時間去執行我們需要的腳本、命令及需要Linux做的事情。
以前寫過一個腳本,由于當時沒有學過計劃任務,所以寫起來特別痛苦,該腳本的需求是每天晚上11:00 備份/etc目錄
當時特別小白,于是這么寫的:
Vim
rebootScript ‘
#!/bin/bash
while
true;do
If [ -d
/app/etc_backup ];then
cp -a /etc /app/etc
else
mkdir -p /app/etc_backup && cp -a /etc /app/etc_backup
fi
sleep 24h
done
這個sleep一直困擾我,當時不得不在腳本里加死循環,為了每24小時后執行,加了sleep
24h 。這樣寫非常LOW并且十分占用資源的。
相信有很多人都是有過這種遭遇,所以這時我們就十分需要一個系統專門維護的計劃任務。我們不必在腳本里去考慮什么時間執行,而把所有的執行權限交給系統處理。于是at和cron 就此誕生。
at 對于我們來說,使用不是特別頻繁,功能上只執行一次我們設定的計劃任務。執行之后釋放。
at任務
包:at
at命令:at [option]
TIME
常用選項:
-V 顯示版本信息:
-l: 列出指定隊列中等待運行的作業;相當于atq
-d: 刪除指定的作業;相當于atrm
-c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務 -m:當任務被完成之后,將給用戶發送郵件。
用法:
at時間格式
HH:MM 比如 10:00
即在今日的 10:00 進行,若該時刻已過,則明天此時執行任務
HH:MM
YYYY-MM-DD 02:00 2016-09-20
規定在這一天進行該項任務
now + 1 minutes 一分鐘以后
02pm + 3 days |
3天后的下午2點 |
at 是交互命令
要執行的命令輸入完以后需要按ctrl+D 保存;
注意:如果執行的命令有輸入則需要重定向到/dev/null
Cron
周期性任務計劃
cronie: 概念太多,簡單來說就是可以在有規律的時間內重復執行我們要做的事
比如:我們需要每天做備份,目標 /etc
; /tmp
等等。那么我們就要用到Cron了
相關的程序包:
cronie: 主程序包,提供crond守護進程及相關輔助工具
cronie-anacron:cronie的補充程序,用于監控cronie任 務執行狀況,如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨后啟動一次此任務
就是說我們需要安裝這個cronie包并且打開cron的服務
crontabs:包含CentOS提供系統維護任務
Crontabs 就是我們系統級別的配置文件,我們只要把要運行的命令加到這里就會按期運行我們的腳本。
注釋行以 # 開頭
#
Example of job definition:
#
.—————- minute (0 – 59)
#
| .————- hour (0 – 23)
#
| | .———- day of month (1 – 31)
#
| | | .——- month (1 – 12) OR jan,feb,mar,apr …
#
| | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR
sun,mon,tue,wed,thu,fri,sat
#|||||
#
* * * * * user-name command to be executed
例如:每天晚上10點運行echo命令;
0 */22 * * * centos /bin/echo “Hello world!”
這里加斜杠意思是 每個; */22 :每天22點都要執行
時間表示法:
(1) 特定值
給定時間點有效取值范圍內的值
(2) 給定時間點上有效取值范圍內的所有值 表示“每.
(3) 離散取值 #,#,#
(4) 連續取值 #-#
(5) 在指定時間范圍上,定義步長 /#: #即為步長
@reboot
@yearly
@annually
@monthly
@weekly
@daily
@hourly
系統的計劃任務設置位置:
/etc/crontab /etc/cron.d/ 配置文件
/etc/cron.hourly/ 腳本
/etc/cron.daily/ 腳本
/etc/cron.weekly/ 腳本
/etc/cron.monthly/腳本
系統級命令一般用戶是不能訪問添加的,因此周期計劃任務也有用戶級別設置;
用戶cron:
crontab命令定義,每個用戶都有專用的cron任務文件:
/var/spool/cron/USERNAME
crontab命令:
crontab
[-u user] [-l | -r | -e] [-i]
-l: 列出所有任務;
-e: 編輯任務;
-r: 移除所有任務;
-i:同-r一同使用,以交互式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務
控制用戶執行計劃任務,設置黑白名單:
/etc/cron.{allow,deny}
at和crontab
一次性作業使用 at
重復性作業使用crontab
原創文章,作者:曉楠,如若轉載,請注明出處:http://www.www58058.com/75889