此功能需要在BIOS中設(shè)定,并且你的主板的高級(jí)電源管理設(shè)置必須支持這個(gè)功能,不過(guò)現(xiàn)在多數(shù)的主板全支持。
城口網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),城口網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為城口近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的城口做網(wǎng)站的公司定做!
(1)步驟一: 啟動(dòng)系統(tǒng)按DEL,進(jìn)入BIOS,然后選中 "POWER MANAGEMENT FEATURES" (電源管理設(shè)置),回車(chē)進(jìn)入.在電源窗口中找到"RESTORE ON AC/POWER LOSS"項(xiàng),按回車(chē),然后通過(guò)方向鍵設(shè)置其值為"POWER ON"。
(2)步驟二: 選中"RESUME ON RTC ALARM"并按回車(chē),接著通過(guò)方向鍵設(shè)置其值為"ENABLE"
(3)步驟三: 選中"RTC ALARM DATE"按回車(chē),然后將其值設(shè)定為"EVERYDAY",表示每天都進(jìn)行一樣的操作,按照同樣的方法,分別將"RTC ALARM HOURS""RTC ALARM MINUTE""RTM ALARM SECOND"設(shè)置為"12""30""00"。由于在linux系統(tǒng)下主板的時(shí)間與系統(tǒng)的時(shí)間不一致。這表示開(kāi)機(jī)時(shí)間為早上的"8:30:00",全部設(shè)置好后,按F10,保存并重新啟動(dòng).
《使用PSSH批量管理Linux》 一文中,已經(jīng)學(xué)習(xí)了使用pssh批量管理linux的技巧。而很多時(shí)候,我們需要定時(shí)執(zhí)行一些任務(wù),或者需要定時(shí)執(zhí)行一些批量任務(wù)。因此,本文就來(lái)研究一下linux設(shè)置定時(shí)任務(wù)的方法。
主要參考 Linux Crontab 定時(shí)任務(wù) 、 Linux定時(shí)任務(wù)Crontab命令詳解 和 Linux 定時(shí)任務(wù)詳解 。
cron(crond)是linux下用來(lái)周期性的執(zhí)行某種任務(wù)或等待處理某些事件的一個(gè)守護(hù)進(jìn)程。linux系統(tǒng)上面原本就有非常多的計(jì)劃性工作,因此這個(gè)系統(tǒng)服務(wù)是默認(rèn)啟動(dòng)的。crond進(jìn)程每分鐘會(huì)定期檢查是否有要執(zhí)行的任務(wù),如果有要執(zhí)行的任務(wù),則自動(dòng)執(zhí)行該任務(wù)。另外,由于使用者自己也可以設(shè)置計(jì)劃任務(wù),所以,linux系統(tǒng)也提供了使用者控制計(jì)劃任務(wù)的命令:crontab命令。
crontab命令是cron table的簡(jiǎn)寫(xiě),它是cron的配置文件,也可以叫它作業(yè)列表,我們可以在以下文件夾內(nèi)找到相關(guān)配置文件。
linux下的任務(wù)調(diào)度分為兩類,系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度。
系統(tǒng)任務(wù)調(diào)度:系統(tǒng)周期性所要執(zhí)行的工作,比如寫(xiě)緩存數(shù)據(jù)到硬盤(pán)、日志清理等。 /etc/crontab 文件就是系統(tǒng)任務(wù)調(diào)度的配置文件。
用戶任務(wù)調(diào)度:用戶定期要執(zhí)行的工作,比如用戶數(shù)據(jù)備份、定時(shí)郵件提醒等。用戶可以使用 crontab 工具來(lái)定制自己的計(jì)劃任務(wù)。所有用戶定義的crontab文件都被保存在 /var/spool/cron/crontabs/ 目錄中,其文件名與用戶名一致。
假設(shè)我們使用的是Ubuntu14.04.5 Server版,查看 /etc/crontab ,內(nèi)容為:
第一行SHELL變量指定了系統(tǒng)要使用哪個(gè)shell;第二行PATH變量指定了系統(tǒng)執(zhí)行 命令的路徑。
接下來(lái)的命令格式為:
m h dom mon dow user command
英文全拼為:
minute hour day month week user commond
注意, /var/spool/cron 目錄中的用戶調(diào)度任務(wù),沒(méi)有user一項(xiàng),因?yàn)槲募呀?jīng)代表了user。
在以上各個(gè)字段中,還可以使用以下特殊字符:
crontab命令格式為:
crontab [-u username] [file] [ -e | -l | -r ]
設(shè)置定時(shí)任務(wù)和時(shí)間緊密相關(guān),如果服務(wù)器的時(shí)區(qū)時(shí)間設(shè)置和本地不同,就不能保證計(jì)劃任務(wù)的正確執(zhí)行。所以使用crontab的第一步,是調(diào)節(jié)好服務(wù)器的時(shí)間。
下面參考 Ubuntu 16.04將系統(tǒng)時(shí)間寫(xiě)入到硬件時(shí)間BIOS ,對(duì)服務(wù)器時(shí)間進(jìn)行調(diào)節(jié)。
時(shí)間是有時(shí)區(qū)的,無(wú)論硬件時(shí)間還是操作系統(tǒng)時(shí)間。hwclock的時(shí)區(qū)在/etc/default/rcS文件中設(shè)置,里面有一個(gè)參數(shù)UTC,默認(rèn)值為yes,表示使用UTC時(shí)區(qū),如果設(shè)置為no,那表示使用osclock的時(shí)區(qū)。建議hwclock與osclock設(shè)置相同的時(shí)區(qū),也就是no。
1、查看服務(wù)器硬件時(shí)間
sudo hwclock -r ,看到的時(shí)間格式為: Wed 23 May 2018 11:02:17 AM HKT -0.031663 seconds
2、查看服務(wù)器系統(tǒng)時(shí)間
date ,看到的時(shí)間格式為: Wed May 23 11:02:41 HKT 2018
3、設(shè)置hwclock和osclock時(shí)區(qū)相同
sudo vim /etc/default/rcS ,找到:
修改為:
4、將系統(tǒng)時(shí)間寫(xiě)入硬件時(shí)間
sudo hwclock -w
5、修改系統(tǒng)時(shí)區(qū)
osclock的時(shí)區(qū)配置文件為/etc/timezone,不建議直接修改配置文件。
如果你想修改為CST時(shí)間,那么執(zhí)行 sudo tzselect 命令時(shí),選擇Asia-China-Beijing Time即可,這時(shí)會(huì)提示使用Asia/Shanghai時(shí)區(qū)。(ubuntu和centos通用)
6、設(shè)置即刻生效
執(zhí)行 date ,發(fā)現(xiàn)時(shí)區(qū)沒(méi)有變化,依然是HKT。
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo ntpdate time.windows.com
如果執(zhí)行ntpdate報(bào)錯(cuò):ntpdate[18409]: no server suitable for synchronization found ,那么就換一個(gè)時(shí)間同步工具。
sudo apt-get install rdate
sudo rdate -s time-b.nist.gov
再次執(zhí)行 date ,發(fā)現(xiàn)時(shí)區(qū)已經(jīng)變成了CST。
7、硬件時(shí)間同步
sudo hwclock -r ,發(fā)現(xiàn)硬件時(shí)間落后。
sudo hwclock -w ,再次把系統(tǒng)時(shí)間寫(xiě)入硬件時(shí)間,同步完成。
實(shí)例1:每分鐘、每小時(shí)、每天、每周、每月、每年執(zhí)行
實(shí)例2:每小時(shí)的第3和第15分鐘執(zhí)行
3,15 * * * * myCommand
實(shí)例3:在上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行
3,15 8-11 * * * myCommand
實(shí)例4:每隔兩天的上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行
3,15 8-11 */2 * * myCommand
實(shí)例5:每周一上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行
3,15 8-11 * * 1 myCommand
實(shí)例6:每晚的21:30重啟smb
30 21 * * * /etc/init.d/smb restart
實(shí)例7:每月1、10、22日的4 : 45重啟smb
45 4 1,10,22 * * /etc/init.d/smb restart
實(shí)例8:每周六、周日的1 : 10重啟smb
10 1 * * 6,0 /etc/init.d/smb restart
實(shí)例9:每天18 : 00至23 : 00之間每隔30分鐘重啟smb
0,30 18-23 * * * /etc/init.d/smb restart
實(shí)例10:每星期六的晚上11 : 00 pm重啟smb
0 23 * * 6 /etc/init.d/smb restart
實(shí)例11:每一小時(shí)重啟smb
0 * * * * /etc/init.d/smb restart
實(shí)例12:晚上11點(diǎn)到早上7點(diǎn)之間,每隔一小時(shí)重啟smb
0 23-7/1 * * * /etc/init.d/smb restart
實(shí)例13:每月的4號(hào)與每周一到周三的11點(diǎn)重啟smb
0 11 4 * mon-wed /etc/init.d/smb restart
實(shí)例14:一月一號(hào)的4點(diǎn)重啟smb
0 4 1 jan * /etc/init.d/smb restart
實(shí)例15:每小時(shí)執(zhí)行/etc/cron.hourly目錄內(nèi)的腳本
01 * * * * root run-parts /etc/cron.hourly
run-parts這個(gè)參數(shù)了,如果去掉這個(gè)參數(shù)的話,后面就可以寫(xiě)要運(yùn)行的某個(gè)腳本名,而不是目錄名了。
目標(biāo):每分鐘查看一下ganglia的狀態(tài),并保存到/tmp/log/ganglia目錄。
1、創(chuàng)建/tmp/log/ganglia目錄
sudo mkdir -p /tmp/log/ganglia
sudo chmod a+w /tmp/log/ganglia
2、編輯crontab
crontab -e ,選擇編輯器為vim
3、在crontab文件中添加一行
4、查看crontab任務(wù)
crontab -l ,看到任務(wù)已經(jīng)添加成功。
5、等待了五分鐘,發(fā)現(xiàn)/tmp/log/ganglia目錄下啥也沒(méi)有。
sudo service cron status ,狀態(tài)正常。
sudo /etc/init.d/cron restart ,重啟cron試試。
又等待了五分鐘,發(fā)現(xiàn)/tmp/log/ganglia目錄下依然空空。
莫非是因?yàn)閜ssh沒(méi)有使用絕對(duì)路徑? whereis pssh ,找到pssh路徑為 /usr/lib/pssh ,修改crontab為:
然而,并沒(méi)有用。
還是查看下crontab日志吧!
以下主要參考 Ubuntu下用crontab 部署定時(shí)任務(wù) 。
1、編輯50-default.conf
sudo vim /etc/rsyslog.d/50-default.conf
2、把cron前的井號(hào)去掉,也就是修改為:
3、重啟rsyslog服務(wù)
sudo service rsyslog restart
4、重啟crontab服務(wù)
sudo service cron restart
5、查看crontab日志
less /var/log/cron.log
果然發(fā)現(xiàn)了問(wèn)題:
也就是說(shuō),命令確實(shí)按時(shí)執(zhí)行了,只不過(guò)沒(méi)有執(zhí)行完,被百分號(hào)截?cái)嗔?,?dǎo)致log文件沒(méi)有正常生成!
修改crontab為:
終于,log文件成功生成,nice!但是,文件內(nèi)容是空的!因?yàn)椋?/usr/lib/pssh 是一個(gè)目錄,不是pssh命令!真正的pssh命令是parallel-ssh,找到它的位置為 /usr/bin/parallel-ssh ,修改crontab:
至此,問(wèn)題圓滿解決。
實(shí)際使用的時(shí)候,一天獲取一次ganglia的狀態(tài)就夠了,所以crontab改成:
以上,每天執(zhí)行一次定時(shí)任務(wù),抓取ganglia的運(yùn)行狀態(tài)保存到日志文件中。緊接著,我們的目標(biāo)是使用腳本檢查當(dāng)天的日志文件,如果發(fā)現(xiàn)ganglia運(yùn)行異常,則產(chǎn)生一個(gè)錯(cuò)誤日志。
1、假設(shè)日志文件ganglia-20180524.log的內(nèi)容為:
2、參考 grep命令最經(jīng)常使用的功能總結(jié) ,編寫(xiě)腳本checkganglia.sh
3、執(zhí)行
chmod a+x checkganglia.sh
./checkganglia.sh
如果所有客戶機(jī)的ganglia運(yùn)行正常,就會(huì)輸出All services are runing!。如果有的客戶機(jī)ganglia進(jìn)程不存在,則會(huì)在/tmp/log/ganglia/目錄下生成當(dāng)天的錯(cuò)誤日志。
4、設(shè)置定時(shí)運(yùn)行
因?yàn)槿罩镜臋z查工作要在日志生成之后,所以時(shí)間上延后十分鐘。
上面的腳本,還有很多要改進(jìn)的地方。比如有的客戶機(jī)宕機(jī)了,上面的腳本檢查不出來(lái)。比如有的客戶機(jī)ganglia服務(wù)沒(méi)有啟動(dòng),那么具體是哪幾臺(tái)?針對(duì)這兩個(gè)問(wèn)題,下面進(jìn)行改進(jìn)。假設(shè)已經(jīng)知道客戶機(jī)的數(shù)量為10。
參考 csplit命令 ,checkganglia.sh腳本修改為:
以上腳本,實(shí)現(xiàn)了當(dāng)客戶機(jī)數(shù)量不為10的時(shí)候,進(jìn)行報(bào)錯(cuò);當(dāng)客戶機(jī)ganglia服務(wù)沒(méi)有啟動(dòng)時(shí),進(jìn)行報(bào)錯(cuò),并且篩選出所有沒(méi)有啟動(dòng)ganglia的客戶機(jī)。
本文中,我們先學(xué)習(xí)了crontab的基礎(chǔ)知識(shí)和基本用法。然后通過(guò)監(jiān)控ganglia這一個(gè)應(yīng)用場(chǎng)景來(lái)具體學(xué)習(xí)crontab的詳細(xì)使用方法,包括查看cron日志的方法,crontab中命令轉(zhuǎn)義的方法,定時(shí)執(zhí)行腳本的方法,以及審閱日志腳本的編寫(xiě)和進(jìn)階。
至此,還不夠完美,因?yàn)槲覀冃枰刻斓卿浌芾頇C(jī)查看有沒(méi)有錯(cuò)誤日志。下一篇 Linux設(shè)置郵件提醒 中,我們將會(huì)研究linux設(shè)置郵件提醒的方法。審閱完日志后,如果腳本能夠給我們發(fā)送一封郵件,告知我們審閱的結(jié)果,那么我們就不必再每天查看錯(cuò)誤日志。
vixie-cron 軟件包是 cron 的主程序;
crontabs 軟件包是用來(lái)安裝、卸裝、或列舉用來(lái)驅(qū)動(dòng) cron 守護(hù)進(jìn)程的表格的程序。
chkconfig --level 345 crond on
定時(shí)任務(wù)設(shè)置
使用以下命令打開(kāi)配置文件,編輯文件,保存即可
示例:
linux corn 在線表達(dá)式:
注意:這里的定時(shí)表達(dá)式和java中的corn不是一樣的,具體分別不細(xì)說(shuō)了。
與crond不同的是,at任務(wù)調(diào)度是一次性的,而crond是重復(fù)性的
1.1 at命令是一次性定時(shí)計(jì)劃任務(wù),at的守護(hù)進(jìn)程atd會(huì)以后臺(tái)模式運(yùn)行,檢查作業(yè)隊(duì)列來(lái)運(yùn)行
1.2 默認(rèn)情況下,atd守護(hù)進(jìn)程每60s檢查作業(yè)隊(duì)列,有作業(yè)時(shí),會(huì)檢查作業(yè)運(yùn)行時(shí)間,如果時(shí)間與當(dāng)前時(shí)間匹配,則運(yùn)行此作業(yè)
1.3 at命令是一次性定時(shí)計(jì)劃任務(wù),執(zhí)行完一個(gè)任務(wù)后就不再執(zhí)行這個(gè)任務(wù)了
1.4 在使用at命令的時(shí)候,一定要保證atd進(jìn)程的啟動(dòng),可以使用相關(guān)指令查看
ps -ef | grep atd 可以檢查atd是否在運(yùn)行
at [選項(xiàng)] [時(shí)間]
按兩次 ctrl+d 結(jié)束at命令的輸入
4.1 當(dāng)天的hh:mm(小時(shí):分鐘),假如這個(gè)時(shí)間已經(jīng)過(guò)去,那么就第二天的這個(gè)時(shí)間執(zhí)行。例如04:00
4.2 模糊的詞語(yǔ),例如midnight、noon、teatime(下午茶時(shí)間,16:00左右)
4.3 采用12小時(shí)計(jì)時(shí)制,例如8am
4.4 指定執(zhí)行命令的具體日期,格式為month dat(月 日)或者mm/dd/yy或者dd.mm.yy,指定的日期必須跟著寫(xiě)在在指定時(shí)間的后面,例如:04:00 2021-3-1就是2021年3月1日凌晨4點(diǎn)整執(zhí)行
4.5 相對(duì)計(jì)時(shí)法,指定格式為now + count time-units,now就是當(dāng)前時(shí)間,time-units是時(shí)間單位,可以是minutes、hours、days、weeks。count是時(shí)間的數(shù)量,例如:now + 5 minutes
4.6 直接用today、tomorrow來(lái)指定完成命令的時(shí)間
5.1 2天后的下午5點(diǎn),執(zhí)行/bin/ls /home指令
at 5pm + 2 days 按回車(chē)鍵
然后寫(xiě)下那個(gè)時(shí)刻要執(zhí)行命令 /bin/ls /home
最后按兩次ctrl+d退出at指令
5.2 atq指令可以直接執(zhí)行,查看系統(tǒng)中待執(zhí)行的工作任務(wù)
5.3 明天17:00輸出時(shí)間到指定文件內(nèi) /root/date100.log
at 17:00 tomorrow 按回車(chē)鍵
date /root/date100.log
按兩次ctrl+d退出at指令的輸入
5.4 2分鐘后
at now + 2 minutes
5.5 刪除已經(jīng)設(shè)置的任務(wù),atrm 編號(hào)
可以用atq列出待執(zhí)行的任務(wù),列出后第一列就是job編號(hào)
linux下的crontab服務(wù):
1、crontab 是用來(lái)讓使用者在固定時(shí)間或固定間隔執(zhí)行程序之用
在linux平臺(tái)上如果需要實(shí)現(xiàn)任務(wù)調(diào)度功能可以編寫(xiě)cron腳本來(lái)實(shí)現(xiàn)。
以某一頻率執(zhí)行任務(wù)
linux缺省會(huì)啟動(dòng)crond進(jìn)程,crond進(jìn)程不需要用戶啟動(dòng)、關(guān)閉。
crond進(jìn)程負(fù)責(zé)讀取調(diào)度任務(wù)并執(zhí)行,用戶只需要將相應(yīng)的調(diào)度腳本寫(xiě)入cron的調(diào)度配置文件中。
cron的調(diào)度文件有以下幾個(gè):
1. crontab
2. cron.d
3. cron.daily
4. cron.hourly
5. cron.monthly
6. cron.weekly
如果用的任務(wù)不是以hourly monthly weekly方式執(zhí)行,則可以將相應(yīng)的crontab寫(xiě)入到crontab 或cron.d目錄中。
示例:
每隔一分鐘執(zhí)行一次腳本 /opt/bin/test-cron.sh
可以在cron.d新建腳本 echo-date.sh
內(nèi)容為
*/1 * * * * root /opt/bin/test-cron.sh
2、cron是一個(gè)linux下的定時(shí)執(zhí)行工具,可以在無(wú)需人工干預(yù)的情況下運(yùn)行作業(yè)。由于Cron 是Linux的內(nèi)置服務(wù),如果它不自動(dòng)起來(lái),可以用以下的方法啟動(dòng)、關(guān)閉這個(gè)服務(wù):
/sbin/service crond start //啟動(dòng)服務(wù)
/sbin/service crond stop //關(guān)閉服務(wù)
/sbin/service crond restart //重啟服務(wù)
/sbin/service crond reload //重新載入配置
你也可以將這個(gè)服務(wù)在系統(tǒng)啟動(dòng)的時(shí)候自動(dòng)啟動(dòng):
在/etc/rc.d/rc.local這個(gè)腳本的末尾加上:
/sbin/service crond start
現(xiàn)在Cron這個(gè)服務(wù)已經(jīng)在進(jìn)程里面了,我們就可以用這個(gè)服務(wù)了
查看服務(wù)是否已經(jīng)運(yùn)行用 ps -ax | grep cron
3、crontab命令
查看該用戶下的crontab服務(wù)是否創(chuàng)建成功, 用 crontab -l 命令
命令 which php 查看linux下安裝的php的路徑
cron服務(wù)提供crontab命令來(lái)設(shè)定cron服務(wù)的,以下是這個(gè)命令的一些參數(shù)與說(shuō)明:
crontab -u //設(shè)定某個(gè)用戶的cron服務(wù),一般root用戶在執(zhí)行這個(gè)命令的時(shí)候需要此參數(shù)
crontab -l //列出某個(gè)用戶cron服務(wù)的詳細(xì)內(nèi)容
crontab -r //刪除沒(méi)個(gè)用戶的cron服務(wù)
crontab -e //編輯某個(gè)用戶的cron服務(wù)
比如說(shuō)root查看自己的cron設(shè)置:crontab -u root -l
再例如,root想刪除fred的cron設(shè)置:crontab -u fred -r
在編輯cron服務(wù)時(shí),編輯的內(nèi)容有一些格式和約定,輸入:crontab -u root -e
進(jìn)入vi編輯模式,編輯的內(nèi)容一定要符合下面的格式:*/1 * * * * ls /tmp/ls.txt
任務(wù)調(diào)度的crond常駐命令crond 是linux用來(lái)定期執(zhí)行程序的命令。當(dāng)安裝完成操作系統(tǒng)之后,默認(rèn)便會(huì)啟動(dòng)此 任務(wù)調(diào)度命令。crond命令每分鐘會(huì)定期檢查是否有要執(zhí)行的工作,如果有要執(zhí)行的工作便會(huì)自動(dòng)執(zhí)行該工作。
crontab命令選項(xiàng):
-u指定一個(gè)用戶
-l列出某個(gè)用戶的任務(wù)計(jì)劃
-r刪除某個(gè)用戶的任務(wù)
-e編輯某個(gè)用戶的任務(wù)
4、cron文件語(yǔ)法:
分 小時(shí) 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范圍,0表示周日一般一行對(duì)應(yīng)一個(gè)任務(wù))
5、 新增調(diào)度任務(wù)
新增調(diào)度任務(wù)可用兩種方法:
1)、在命令行輸入: crontab -e 然后添加相應(yīng)的任務(wù),wq存盤(pán)退出。
2)、直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應(yīng)的任務(wù)。
6、 查看調(diào)度任務(wù)
crontab -l //列出當(dāng)前的所有調(diào)度任務(wù)
crontab -l -u jp //列出用戶jp的所有調(diào)度任務(wù)
7、 刪除任務(wù)調(diào)度工作
crontab -r //刪除所有任務(wù)調(diào)度工作
8、 任務(wù)調(diào)度執(zhí)行結(jié)果的轉(zhuǎn)向
例1:每天5:30執(zhí)行l(wèi)s命令,并把結(jié)果輸出到/jp/test文件中
30 5 * * * ls /jp/test 21
注:21 表示執(zhí)行結(jié)果及錯(cuò)誤信息。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現(xiàn)錯(cuò)誤,或者有數(shù)據(jù)輸出,數(shù)據(jù)作為郵件發(fā)給這個(gè)帳號(hào)
HOME=/ //使用者運(yùn)行的路徑,這里是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時(shí)執(zhí)行/etc/cron.hourly內(nèi)的腳本
02 4 * * * root run-parts /etc/cron.daily //每天執(zhí)行/etc/cron.daily內(nèi)的腳本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執(zhí)行 /etc/cron.weekly內(nèi)的腳本
42 4 1 * * root run-parts /etc/cron.monthly //每月去執(zhí)行/etc/cron.monthly內(nèi)的腳本
大家注意”run-parts”這個(gè)參數(shù)了,如果去掉這個(gè)參數(shù)的話,后面就可以寫(xiě)::要運(yùn)行的某個(gè)腳本名,而不是文件夾名了。
總結(jié):
編寫(xiě)定時(shí)任務(wù)的兩種方式:1.sudo vim /etc/crontab 2. sudo crontab -e
查看定時(shí)任務(wù)的兩種方式:1.sudo cat /etc/crontab 2.sudo crontab -l
*/1 * * * * appuser cd /app/webserver/website/api-cb.chuchujie.com/master/current/script/ ./back_coupon.sh 2 10 /dev/null 21
查看定時(shí)任務(wù)是否運(yùn)行:
sudo tail -f /var/log/cron //定時(shí)任務(wù)日志(查看剛才設(shè)置的任務(wù)是否執(zhí)行)
注:腳本有可執(zhí)行權(quán)限
sh a.sh(不需要執(zhí)行權(quán)限)
./sh (需要執(zhí)行權(quán)限)
1.當(dāng)shell腳本具有可執(zhí)行權(quán)限時(shí),用sh filename與./filename執(zhí)行腳本是沒(méi)有區(qū)別的。./filename是因?yàn)楫?dāng)前目錄沒(méi)有在PATH中,所有"."是用來(lái)表示當(dāng)前目錄的。
crond是Linux下用來(lái)周期性的執(zhí)行某種任務(wù)或等待處理某些事件的一個(gè)守護(hù)進(jìn)程,與windows下的計(jì)劃任務(wù)類似,在CentOS Linux release 7.2.1511中默認(rèn)是開(kāi)機(jī)啟動(dòng)的,大家可以使用命令:systemctl status crond進(jìn)行查看。 crond進(jìn)程定期(每分鐘)檢查是否有要執(zhí)行的任務(wù),如果有要執(zhí)行的任務(wù),則自動(dòng)執(zhí)行該任務(wù)。用戶在cron表
(也被稱為crontab文件)指定了定時(shí)任務(wù),crontab也就是我們常見(jiàn)的定時(shí)任務(wù)設(shè)置命令。Linux下的任務(wù)調(diào)度分為兩類,系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度。
系統(tǒng)任務(wù)調(diào)度 :系統(tǒng)周期性所要執(zhí)行的工作,比如寫(xiě)緩存數(shù)據(jù)到硬盤(pán)、日志清理等。/etc/crontab文件就是系統(tǒng)任務(wù)調(diào)度的配置文件。
用戶任務(wù)調(diào)度 :用戶定期要執(zhí)行的工作,比如用戶數(shù)據(jù)備份、定時(shí)郵件提醒等。用戶可以使用 crontab 工具來(lái)定制自己的計(jì)劃任務(wù)。所有用戶定義的crontab文件都被保存在/var/spool/cron目錄中。其文件名與用戶名一致,使用者權(quán)限文件如下:
通過(guò)以上幫助信息,我們可以知道crond是執(zhí)行任務(wù)計(jì)劃的一個(gè)守護(hù)進(jìn)程。在使用crontab之前我們可以根據(jù)幫助信息來(lái)設(shè)置相關(guān)選項(xiàng),一般情況下我們都使用默認(rèn)值。
1.建立演示賬號(hào)crontab。
2.星號(hào)(*)使用舉例。
以上例子中完整演示了crontab從建立到執(zhí)行的過(guò)程?!? 0 * * * echo "GeekDevOps"”表示在每天00:05執(zhí)行命令:echo "GeekDevOps"。后面的星號(hào)表示只要前面條件滿足都執(zhí)行。例子中的-u選項(xiàng)指定了用戶:crontab,-l選項(xiàng)列舉了相關(guān)用戶的用戶任務(wù)調(diào)度,不指定用戶則默認(rèn)為root。執(zhí)行結(jié)果默認(rèn)寫(xiě)入到用戶mail目錄下的相關(guān)文件中。
3.逗號(hào)(,)的使用舉例。
現(xiàn)在我們已經(jīng)把用戶切換到crontab下,因此無(wú)需額外指定-u選項(xiàng)相關(guān)內(nèi)容。“3 2,6,8 * * *”表示每天的02:03:00、06:03:00、08:03:00分別執(zhí)行一次命令:ls /usr/local。
4.減號(hào)(-)的使用舉例。
例子中的“0 2-6 * * 6 df -h /”表示用戶crontab在每周六的02:00、03:00、04:00、05:00、06:00執(zhí)行命令:df -h / 。
5.斜杠(/)的使用舉例。
例子中表示每隔2分鐘執(zhí)行一次命令:echo "GeekDevOps"/root/GeekDevOps.txt。
6.crontab的使用非常簡(jiǎn)單,很容易理解,只要在取值范圍內(nèi)設(shè)置執(zhí)行的值基本是沒(méi)有問(wèn)題的。現(xiàn)在我們要?jiǎng)h除已經(jīng)設(shè)置的這些定時(shí)任務(wù)。
例子中,選項(xiàng)-r表示刪除所有定時(shí)任務(wù)。選項(xiàng)-i表示在刪除前進(jìn)行再次確定,輸入y或者Y才能真正刪除。
7.備份我們?cè)O(shè)置的用戶任務(wù)調(diào)度配置文件。
8.系統(tǒng)任務(wù)調(diào)度的使用舉例。
系統(tǒng)任務(wù)調(diào)度與用戶任務(wù)調(diào)度不一樣,需要直接在/etc/crontab里面配置,如果需要指定用戶,還需要在執(zhí)行命令前指定用戶名。通過(guò)crontab -l 命令是查看不到系統(tǒng)任務(wù)調(diào)度任務(wù)的。