亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Linux之任務(wù)計(jì)劃 crontab

Linux之任務(wù)計(jì)劃 

 

用過windows的同學(xué)應(yīng)該都知道在控制面板中有一個(gè)“任務(wù)計(jì)劃”選項(xiàng),我們可以通過向?qū)гO(shè)置讓計(jì)算機(jī)在某個(gè)時(shí)間點(diǎn)或者開機(jī)時(shí)運(yùn)行某個(gè)腳本或者批處理等等,方便我們的日常管理監(jiān)視工作;同樣在Linux系統(tǒng)中,如果我們想在開機(jī)時(shí)就運(yùn)行某個(gè)操作,可以直接將命令寫入/etc/rc.local中,該操作就會在機(jī)器開機(jī)時(shí)運(yùn)行;如果把自己寫的Bash Shell腳本的名稱寫在/etc/rc.local中,開機(jī)后也會執(zhí)行其操作;也就是說,在Linux啟動(dòng)的最后階段,系統(tǒng)會執(zhí)行存于rc.local中的命令;類似于windows里面的“啟動(dòng)”菜單。如果想在Linux中定時(shí)去執(zhí)行某些操作呢?我們可以使用at ,batch ,crontab , anacron等命令;

一、一次性執(zhí)行任務(wù)命令atbatch

說白了就是任務(wù)只執(zhí)行一次,就結(jié)束操作,不會循環(huán)執(zhí)行其操作。

  1. 使用方式:at [-v][-q queue][-f file][-mldbv] TIME

    說明:at可以讓使用者指定在TIME這個(gè)特定時(shí)刻執(zhí)行某個(gè)程序或指令,TIME的格式是HH:MM其中HH為小時(shí),MM為分鐘。如果想要指定超過一年內(nèi)的時(shí)間,則可以使用MMDDYY或者MM/DD/YY的格式,其中MM是分鐘,DD是第幾天,YY是指年份。另外,也可以使用想now+時(shí)間間隔來指定時(shí)間,其中的時(shí)間間隔可以為minutes ,hours ,days ,weeks.例如now+3days;也可以指定todaytomorrow來表示今天或明天。當(dāng)指定了時(shí)間并按下enter之后,at會進(jìn)入交互模式并要求輸入指令或程序,當(dāng)輸入完成后按ctrl+D即可完成。執(zhí)行結(jié)果會通過郵件發(fā)送給執(zhí)行程序的賬戶。

  2. 參數(shù)說明

    -V :出版編號

    -q:使用指定queue來存儲,at的資料存放在所謂的queue中,使用者可以同時(shí)使用多個(gè)queue,queue的編號為a,b,c…..z以及A,B,C……Z52個(gè);

    -m:不管程序指令執(zhí)行完后有沒有輸出結(jié)果,都發(fā)郵件給使用者

    -f file:讀入預(yù)先寫好的命令文檔??梢詫⑺械拿钕葘懭胛臋n在一次讀入;

    -l:列出所有at任務(wù);或者atq;

    -d:刪除at任務(wù),或者使用atrm;  

    -v:列出所有已經(jīng)完成但尚未刪除的指定;

3、實(shí)例:指定今天下午5:30執(zhí)行某個(gè)命令,今天是2015517日中午12點(diǎn)其格式如下:

       at 5:30pm

       at 17:30

       at  17:30 today

       at now + 5 hours

       at now + 300 minutes

       at 17:30 17.5.15

       at 17:30 5/17/2015

       at 17:30 May 17

      實(shí)例2at指定一個(gè)任務(wù),在當(dāng)前時(shí)間一分鐘后執(zhí)行,顯示/etc/issue中的內(nèi)容;1.png

實(shí)例3:先創(chuàng)建一個(gè)文檔work,放入預(yù)先執(zhí)行的命令,然后用at –f work TIME去執(zhí)行;2.png

  1. at的執(zhí)行權(quán)限:

    在任何情況下,root用戶都有執(zhí)行權(quán)限;

    對其他用戶來說,是否能夠使用取決于兩個(gè)文檔/etc/at.allow/etc/at.deny

    如果/etc/at.allow文檔存在的話,那么只有在其中列出的用戶在能夠使用at

    如果該文檔不存在,那么將檢查/etc/at.deny文檔是否存在,在這個(gè)文檔中列出的用戶均不能使用該命令;

    假如兩個(gè)文檔都不存在,那么只有中級用戶能夠使用該命令;

    空的/etc/at.deny文檔意味著所有的用戶都能夠使用該命令,這是系統(tǒng)默認(rèn)狀態(tài).

  2. batch命令同at命令,但無須為其指定時(shí)間,其會選擇系統(tǒng)資源空閑時(shí)執(zhí)行指定的作業(yè)。

  3. mail命令(Linux收發(fā)郵件使用方法)

    在終端中輸入命令mail,回車,如果有郵件會顯示出來有幾封,如果沒有會提示no mail for user;輸入mail后進(jìn)入&模式,此時(shí)可以輸入想要查看的郵件編號數(shù)字來查看內(nèi)容,如果想要?jiǎng)h除某個(gè)郵件可以使用d #命令,按q保存退出,按x不保存退出;

    兩種發(fā)郵件的方法:

           mail –s “subject” username </etc/fstab

           echo “subject”  | mail –s “content”  username

    默認(rèn)系統(tǒng)會安裝并啟動(dòng)郵件服務(wù);25號端口,可以使用netstat –tnl /tan   查看25號端口smtp協(xié)議是否運(yùn)行 ;有的系統(tǒng)可能默認(rèn)沒有安裝郵件系統(tǒng),此時(shí)需要安裝sendmial包即可;

二、周期性執(zhí)行任務(wù)命令crontab(重點(diǎn))

相比用于安排一次性任務(wù)的at命令,crontab命令主要是用于安排一些周期性的任務(wù),比如 定期備份數(shù)據(jù)、定時(shí)殺毒、定期清理垃圾文件等。 Linux中的cron進(jìn)程是一個(gè)主要的系統(tǒng)調(diào)度進(jìn)程,可以在后臺自動(dòng)完成用戶指定的任務(wù) 計(jì)劃。它每分鐘檢查一遍各個(gè)用戶的“”任務(wù)計(jì)劃書“”--也就是crontab文件,如果計(jì)劃書中所指定的運(yùn)行條件滿足,就立即為用戶執(zhí)行計(jì)劃書中的任務(wù)。centos5以前的版本叫做vixie-cron,centos6以后的版本叫作cronie,在運(yùn)行前使用rpm –qa | grep “cron” 來查看系統(tǒng)是否已經(jīng)安裝;可以通過service crond status查看狀態(tài),service crond start ,chkconfig crond on 啟動(dòng)服務(wù),設(shè)置開機(jī)自動(dòng)啟動(dòng);

Cron任務(wù)分兩類:一類是系統(tǒng)cron:定義在/etc/crontab中,一類是用戶cron:定義在/var/spool/cron中,目錄中每個(gè)用戶都有一個(gè)與用戶名相同的文件,其功能類似于/etc/crontab;每行定義一個(gè)獨(dú)立的任務(wù);

  1. crontab命令使用方法

    crontab [-e [username] | -l [username] | -r [username] | -v [username] | File ]

    說明:crontab是用來讓使用者在固定時(shí)間或固定間隔執(zhí)行程序之用,換句話說就是類似使用者的時(shí)程表。

    -u username 是指定username的時(shí)程表,這個(gè)前提是你必須要有其權(quán)限,比如root才能夠指定他人的時(shí)程表,如果不使用-u user的話,就是表示設(shè)定自己的時(shí)程表。

    Crontab –l:列出某個(gè)用戶cron服務(wù)的詳細(xì)內(nèi)容

    Crontab –e:編輯某個(gè)用戶的cron服務(wù);

  2. crontab的格式

    # For details see man 4 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

    # |  |  |  |  |

    # *  *  *  *  *  command to be executed

    說明:當(dāng)使用crontab -e編輯當(dāng)前用戶的cron表后,會出現(xiàn)一個(gè)vi文件,cron的格式是這樣的。分成兩列,左邊是時(shí)間,右邊是運(yùn)行的命令。時(shí)間是由5個(gè)部分組成。如果執(zhí)行的命令太多,可以把這些命令寫到一個(gè)腳本里面,然后再直接調(diào)用這個(gè)腳本,調(diào)用的時(shí)候?qū)懗雒畹耐暾窂健?/span>

    時(shí)間的設(shè)定有一定的要求,前面5個(gè)*代表5個(gè)數(shù)字,數(shù)字的取值范圍和含義如下:

    分鐘(0-59)小時(shí)(0-23)日期(1-31)月份(1-12)星期(0-607都表示星期天

    除了數(shù)字還有幾個(gè)特殊的符號就是“*”“/”“-”“,,*代表所有的取值范圍內(nèi)的數(shù)字,/代表每的意思,*/5代表每5個(gè)單位,-代表從某個(gè)數(shù)字到某個(gè)數(shù)字,“,”分開幾個(gè)離散的數(shù)字。

    例子1:   0 8 5 6 *  command  表示每65日的8點(diǎn)整執(zhí)行命令;

    例子2: 10,30,50 * * * * date  表示每小時(shí)的10分,30分,50分顯示時(shí)間

    例子3: 0 6 * * * * echo “good morning” >>/tmp/test.xt 每天早上6點(diǎn)執(zhí)行,注意單純的echo從屏幕上看不到任何輸出,因?yàn)?/span>cron把任何輸出都會通過mail發(fā)送給用戶;

    例子4: 0 */2 * * * echo “hi” 每兩個(gè)小時(shí)執(zhí)行一次;

    例子5: 0 11 4 * 1-3 command 表示每個(gè)月的4號和每個(gè)禮拜的13的早上11點(diǎn)執(zhí)行

3通常,系統(tǒng)并不允許用戶直接編輯計(jì)劃書,/var/spool/cron/crontabs目錄也只有root用戶才可讀寫。為了方便計(jì)劃書的管理,系統(tǒng)提供了crontab命令:crontab -u username –e;

補(bǔ)充說明:

3.1. 環(huán)境變量,cron進(jìn)程執(zhí)行任務(wù)時(shí),并不加載計(jì)劃書所屬用戶的環(huán)境變量,只加載幾個(gè)最基本的環(huán)境變量,比如執(zhí)行任務(wù)的sh,$HOME,$MAILTO等。這幾個(gè)環(huán)境變量的定義是在 /etc/crontab文件中。其中$MAILTO是指定計(jì)劃執(zhí)行過程中發(fā)生錯(cuò)誤或者有數(shù)據(jù)輸出時(shí)發(fā) 送郵件到哪個(gè)用戶。通常會在腳本中加入. /etc/profile 或者. ~/.bash_profile即可。

3.2. 不能運(yùn)行crontab命令或者計(jì)劃沒有被執(zhí)行,crontab的權(quán)限設(shè)置是由兩個(gè)文件來決定的 /etc/cron.allow, /etc/cron.deny。如果存在/etc/cron.allow,則把要執(zhí)行計(jì)劃的 用戶名稱添加到其中;若/etc/cron.deny存在,則確保要執(zhí)行計(jì)劃的用戶名稱不在 /etc/cron.deny中;如果兩個(gè)文件都存在,/etc/cron.allow優(yōu)先。

3.3. 計(jì)劃書的輸出和日志,如果用戶的計(jì)劃書在運(yùn)行時(shí)有輸出,用戶是無法直接從終端上看 到的。cron進(jìn)程會將執(zhí)行計(jì)劃時(shí)產(chǎn)生的所有輸出數(shù)據(jù)和錯(cuò)誤信息發(fā)送到指定用戶的郵箱 ,用戶可到郵箱中去查看,所以建議在計(jì)劃中把有用的輸出數(shù)據(jù)重定向到文件中。要想 查看各個(gè)計(jì)劃的執(zhí)行情況,可以查看cron進(jìn)程的日志文件:/var/log/cron。

3.4. 更簡單的任務(wù)計(jì)劃, 如果覺得這樣麻煩,還有一種簡單的方法。/etc下面有4個(gè)目錄: cron.hourlycron.daily,cron.weeklycron.weekly,這4個(gè)目錄下腳本的執(zhí)行周期 分別是每小時(shí),每天,每周,每月。根據(jù)自己的需要,將要運(yùn)行的腳本直接放置到對應(yīng) 的目錄下即可,系統(tǒng)會自動(dòng)為你完成任務(wù)。

3.5.使用注意事項(xiàng):每月幾號和周幾一般不同時(shí)使用,如 1 9 * * 3 :表示每周三執(zhí)行一次;

Crontab –e 打開編輯界面定義任務(wù)時(shí)先啟用臨時(shí)文件,如果剛到此時(shí)間點(diǎn)執(zhí)行而沒有編輯會怎么樣?

4anacron: crontab的補(bǔ)充機(jī)制,檢查有沒有過去的一個(gè)有效周期未曾執(zhí)行的任務(wù),如果有,在開機(jī)后的指定時(shí)間點(diǎn)執(zhí)行一次;這個(gè)是系統(tǒng)設(shè)置好了,清理系統(tǒng)垃圾或者是自動(dòng)執(zhí)行某些腳本的系統(tǒng)任務(wù),一般我們做了解就行了,不要更改。配置文件是/etc/anaconrtab。

以上是自己總結(jié)的一些心得體會,任務(wù)計(jì)劃是實(shí)現(xiàn)自動(dòng)化運(yùn)維的重要命令,希望大家重視,如有問題請多指點(diǎn)。

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!