日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

linux 计划任务 cron 全攻略

發(fā)布時(shí)間:2023/12/13 综合教程 21 生活家
生活随笔 收集整理的這篇文章主要介紹了 linux 计划任务 cron 全攻略 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、計(jì)劃任務(wù)概說(shuō);

計(jì)劃任務(wù),是任務(wù)在約定的時(shí)間執(zhí)行已經(jīng)計(jì)劃好的工作,這是表面的意思。在Linux中,我們經(jīng)常用到 crond 服務(wù)器來(lái)完成這項(xiàng)工作。cron服務(wù)器可以根據(jù)配置文件約定的時(shí)間來(lái)執(zhí)行特定的作務(wù)。比如我們可以在配置文件中約定每天早上4點(diǎn),對(duì)httpd 服務(wù)器重新啟動(dòng),這就是一個(gè)計(jì)劃任務(wù);

下面我們先來(lái)說(shuō)說(shuō)cron;


2、cron;

在Linux系統(tǒng)中,計(jì)劃任務(wù)一般是由cron承擔(dān),我們可以把cron設(shè)置為開(kāi)機(jī)時(shí)自動(dòng)啟動(dòng)。cron啟動(dòng)后,它會(huì)讀取它的所有配置文件(全局性 配置文件/etc/crontab,以及每個(gè)用戶的計(jì)劃任務(wù)配置文件),然后cron會(huì)根據(jù)命令和執(zhí)行時(shí)間來(lái)按時(shí)來(lái)調(diào)用度工作任務(wù)。


2.1 cron 的安裝和啟動(dòng);

在一般情況下,cron都是系統(tǒng)默認(rèn)安裝的,我們要學(xué)會(huì)查看軟件包是否已經(jīng)安裝;


2.1.1 在Redhat 或 Fedora等RPM包管理的系統(tǒng)的安裝;

判斷系統(tǒng)是否已經(jīng)安裝cron相關(guān)的包

Fedora 5.0 系統(tǒng)的情況;

其它版本的Fedora及Redhat的系統(tǒng)和這相似;

[root@localhost ~]# rpm -qa |grep cron
vixie-cron-4.1-54.FC5
anacron-2.3-36.1
crontabs-1.10-7.1

其中vixie-cron軟件包是cron的主程序,您可以通過(guò)下面的命令來(lái)了解它,其它軟件包同理;

[root@localhost beinan]# rpm -ql vixie-cron

crontabs 軟件包是用來(lái)安裝、卸裝、或列舉用來(lái)驅(qū)動(dòng) cron 守護(hù)進(jìn)程的表格的程序。cron 守護(hù)進(jìn)程檢查 crontab 文件來(lái)查看某個(gè)指定命令被調(diào)度執(zhí)行的時(shí)間。如果命令已經(jīng)調(diào)度,守護(hù)進(jìn)程就會(huì)執(zhí)行它們。了解crontabs軟件包都安裝了些什么,應(yīng)該用下面的命令;

[root@localhost beinan]# rpm -ql crontabs

如果沒(méi)有安裝,可以從光盤(pán)中找出文件名帶有cron字樣的軟件包來(lái)安裝。

[root@localhost ~]# rpm -ivh vixie-cron-4.1-54.FC5*
[root@localhost ~]# rpm -ivh crontabs*

也可以用yum 來(lái)在線安裝;

[root@localhost ~]# yum install vixie-cron
[root@localhost ~]# yum install crontabs


2.1.2 在Slackware系統(tǒng)中的安裝;

在Slackware中cron軟件包是 dcron,您可以在光盤(pán)中找出來(lái)安裝它;

查看是否已經(jīng)安裝了dcron軟件包,您可以這樣查看。在這里能列出軟件包詳細(xì)的安裝情況;

[root@localhost ~]# more /var/adm/packages/dcron*

如果沒(méi)有安裝,請(qǐng)用下面的命令來(lái)安裝。在第一張安裝盤(pán)中找出dcron軟件包;

[root@localhost ~]# installpkg dcron*.tgz


2.1.3 cron 的開(kāi)啟、停止、重新啟動(dòng)方法;

cron配置文件被修改后,想讓新文件生效,必須重新crond服務(wù)器,有兩種方法可供選擇;


第一種 在Fedora或Redhat 等以RPM包管理的系統(tǒng)中;

[root@localhost ~]# /etc/init.d/crond start
[root@localhost ~]# /etc/init.d/crond stop
[root@localhost ~]# /etc/init.d/crond restart

如果想在Fedora 和 Redhat 或以這些發(fā)行版為基礎(chǔ)克隆的發(fā)行版,如果想自動(dòng)開(kāi)機(jī)運(yùn)行,請(qǐng)用下面的辦法;

[root@localhost ~]# chkconfig --levels 35 crond on

第二種:通用

[root@localhost ~]# pgrep crond 注:判斷crond 是否在運(yùn)行;
[root@localhost ~]# pkill crond 注:殺掉正在運(yùn)行中的crond;
[root@localhost ~]# pgrep crond 注:查看是否被殺掉了;
[root@localhost ~]# /usr/sbin/crond 注:運(yùn)行crond;


2.2 cron 配置文件;

cron 是一個(gè)服務(wù)器程序,我們都知道Linux的服務(wù)器的配置,大多是通過(guò)配置文件來(lái)完成的,cron自然也不例外,在Redhat/Fedora 等系統(tǒng)中它的全局性配置文件是/etc/crontab;在Slackware系統(tǒng)中,全局性文件是/var/spool/cron/crontabs /root 。每個(gè)用戶也有自己的cron配置文件,我們可以通過(guò)crontab -e 來(lái)編輯它;


2.2.1 全局性配置文件;

下面是一個(gè)全局性的配置文件例子,以Fedora Core 5為例;

[root@localhost ~]# more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
1 * * * * root run-parts /etc/cron.hourly
#
2 4 * * * root run-parts /etc/cron.daily
#
22 4 * * 7 root run-parts /etc/cron.weekly
#
42 4 1 * * root run-parts /etc/cron.monthly
#
0,5,10,15,20,25,30,35,40,45,50,55 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

對(duì)于全局性配置文件,我們要用root權(quán)限來(lái)更改,一般是通過(guò)crontab -e 來(lái)修改。但有時(shí)也并不一定是這樣的,比如Fedora Core 5 如果通過(guò)crontab -e 修改的是root用戶的cron 配置文件。所以我們要在Fedora Core 5中修改全局性配置文件可以用vi 編輯器來(lái)修改。vi的用法請(qǐng)參考:《文件編輯器 vi》

在全局性配置文件中,定義了可執(zhí)行命令的路徑環(huán)境變量,所用SHELL類型的定義等,這些大多不用修改;我們經(jīng)常添加的是計(jì)劃任務(wù)或修改任務(wù)執(zhí)行的時(shí)間等;

在全局性配置文件中,我們發(fā)現(xiàn)有類似這些行;

1 * * * * root run-parts /etc/cron.hourly 注:表示每個(gè)小時(shí)的第一分鐘,開(kāi)始執(zhí)行/etc/hourly目錄下的可執(zhí)行程序或腳本;
2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4點(diǎn)2分,開(kāi)始執(zhí)行/etc/cron.daily目錄下的可執(zhí)行程序或腳本;
22 4 * * 7 root run-parts /etc/cron.weekly 注:每年第7個(gè)周4點(diǎn)我22分,開(kāi)始執(zhí)行 /etc/cron.weekly目錄下的可執(zhí)行程序或腳本;
42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4點(diǎn)42分,開(kāi)始執(zhí)行/etc/cron.monthly目錄下的可執(zhí)行程序或腳本;

這些行是用來(lái)在同一時(shí)間批量執(zhí)行任務(wù)的,我們?cè)谝院蟮睦又歇?dú)立出來(lái)解說(shuō),在這里只是讓大家心中有數(shù);


2.2.2 cron 配置計(jì)劃任務(wù)的書(shū)寫(xiě)格式

分鐘 小時(shí) 日 月 周 [用戶名] 命令

說(shuō)明:

第一段應(yīng)該定義的是:分鐘,表示每個(gè)小時(shí)的第幾分鐘來(lái)執(zhí)行。范圍是從0-59
第二段應(yīng)該定義的是:小時(shí),表示從第幾個(gè)小時(shí)來(lái)執(zhí)行,范圍是從0-23
第三段應(yīng)該定義的是:日期,表示從每個(gè)月的第幾天執(zhí)行,范圍從1-31
第四段應(yīng)該定義的是:月,表示每年的第幾個(gè)月來(lái)執(zhí)行,范圍從1-12
第五段應(yīng)該定義的是:周,表示每周的第幾天執(zhí)行,范圍從0-6,其中 0表示星期日。
每六段應(yīng)該定義的是:用戶名,也就是執(zhí)行程序要通過(guò)哪個(gè)用戶來(lái)執(zhí)行,這個(gè)一般可以省略;
第七段應(yīng)該定義的是:執(zhí)行的命令和參數(shù)。

注:其中用戶名可是省略,用戶名定義的是程序用哪個(gè)用戶來(lái)執(zhí)行,比如mysql服務(wù)器,我們可以定義成以mysql用戶來(lái)啟動(dòng)、停止、重新 啟動(dòng),這時(shí)要寫(xiě)上用戶名;不過(guò)對(duì)于cron來(lái)說(shuō)意義不是太大,因?yàn)槊總€(gè)用戶都有自己的cron配置文件。有些程序的啟動(dòng)必須用到root用戶,這時(shí)我們就 可以修改root用戶的cron配置文件就行了。在每個(gè)用戶的配置文件中,不必指定用戶名。

我們可以把計(jì)劃任務(wù)寫(xiě)在全局性配置文件中,如果您想把一個(gè)計(jì)劃放入全局性配置文件中,就得改發(fā)行版所對(duì)應(yīng)的cron全局配置文件,比如Fedora 5的全局性配置文件是/etc/crontab文件;

每個(gè)用戶也能定義自己的cron配置文件,用crontab -e 命令來(lái)定義;

舉一例:讓機(jī)器在每天8點(diǎn)30分重新啟動(dòng);

關(guān)于時(shí)間格式中有7個(gè)字段。我們可以直接更改或者添加,當(dāng)然這是系統(tǒng)任務(wù)調(diào)用。舉個(gè)例子,比如我在每天的早上8點(diǎn)30分重新啟動(dòng)機(jī)器,就可以在
/etc/crontab中加入下面的兩句,第一句就是注釋了。以#號(hào)開(kāi)始,后面寫(xiě)一個(gè)自己能知道這是什么任務(wù)的備注;

# reboot OS
30 8 * * * root /sbin/reboot

第一段應(yīng)該定義的是:分鐘,表示每個(gè)小時(shí)的第幾分鐘來(lái)執(zhí)行。范圍是從0-59
第二段應(yīng)該定義的是:小時(shí),表示從第幾個(gè)小時(shí)來(lái)執(zhí)行,范圍是從0-23
第三段應(yīng)該定義的是:日期,表示從每個(gè)月的第幾天執(zhí)行,范圍從1-31
第四段應(yīng)該定義的是:月,表示每年的第幾個(gè)月來(lái)執(zhí)行,范圍從1-12
第五段應(yīng)該定義的是:周,表示每周的第幾天執(zhí)行,范圍從0-6,其中 0表示星期日。
每六段應(yīng)該定義的是:用戶名,也就是執(zhí)行程序要通過(guò)哪個(gè)用戶來(lái)執(zhí)行,這個(gè)一般可以省略;
第七段應(yīng)該定義的是:執(zhí)行的命令和參數(shù)。

對(duì)比上面的例子就知道,30是不是分鐘??8是不是小時(shí)?如果有*代表的地方,表示全部,也就是說(shuō),每個(gè)月,每天,每星期都要執(zhí)行。root 表示用root用戶執(zhí)行,命令是/sbin/reboot ,也就是說(shuō),系統(tǒng)在每天 8點(diǎn)30分重新啟動(dòng);

我們可以把每天8點(diǎn)30分重新啟動(dòng)的計(jì)劃任務(wù)寫(xiě)入cron全局性配置文件中,也可以定義在root用戶自己的cron配置文件中。如果定義在 root自己的配置文件,請(qǐng)用root身份來(lái)執(zhí)行 crontab -e 來(lái)修改配置文件;crontab -e 進(jìn)入修改配置文件的過(guò)程,其實(shí)和vi的用法一樣,請(qǐng)參看vi 的用法:《文件編輯器 vi》

讓配置文件生效:如果讓配置文件生效,還得重新啟動(dòng)cron,切記,既然每個(gè)用戶下的cron配置文件修改后。也要重新啟動(dòng)cron服務(wù)器。

在Fedora 和Redhat中,我們應(yīng)該用;

[root@localhost ~]# /etc/init.d/crond restart

如果讓crond 在開(kāi)機(jī)時(shí)運(yùn)行,應(yīng)該改變其運(yùn)行級(jí)別;

[root@localhost ~]# chkconfig --levels 35 crond on

在Slackware中,如果開(kāi)機(jī)自動(dòng)運(yùn)行;

查看/etc/rc.d/rc.M文件是否有如的行,如果沒(méi)有就加上,大多是有的;

# Start crond (Dillon's crond):
if [ -x /usr/sbin/crond ]; then
/usr/sbin/crond -l10 >>/var/log/cron 2>&1
</cdoe>

<b>
如果想讓立即讓cron重啟生效,也可以用下面的辦法;
</b>

<code>
[root@localhost ~]# pgrep crond 注:查看crond服務(wù)器是否運(yùn)行;
2022
[root@localhost ~]# pkill crond 注:殺死crond;
[root@localhost ~]# pgrep crond 注:查看crond是否退出;
[root@localhost ~]# /usr/sbin/crond 注:?jiǎn)?dòng)crond;
[root@localhost ~]# pgrep crond 注:查看crond 是否已經(jīng)運(yùn)行得起來(lái)了;
3883


2.2.3 關(guān)于同一時(shí)間,同時(shí)執(zhí)行多個(gè)任務(wù)的定義方法;

我們?cè)谇懊嬉呀?jīng)說(shuō)過(guò),在全局性配置文件中,有類似如下的段落;

1 * * * * root run-parts /etc/cron.hourly 注:表示每個(gè)小時(shí)的第一分鐘,開(kāi)始執(zhí)行/etc/hourly目錄下的可執(zhí)行程序或腳本;
2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4點(diǎn)2分,開(kāi)始執(zhí)行/etc/cron.daily目錄下的可執(zhí)行程序或腳本;
22 4 * * 7 root run-parts /etc/cron.weekly 注:每年第7個(gè)周4點(diǎn)我22分,開(kāi)始執(zhí)行 /etc/cron.weekly目錄下的可執(zhí)行程序或腳本;
42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4點(diǎn)42分,開(kāi)始執(zhí)行/etc/cron.monthly目錄下的可執(zhí)行程序或腳本;

舉例來(lái)說(shuō),我想在每天5點(diǎn)10分來(lái)重新啟動(dòng)httpd 服務(wù)器,與此同時(shí),我們也可以同時(shí)下載一個(gè)ISO文件。如果我們按書(shū)寫(xiě)計(jì)劃任務(wù)的規(guī)則一條一條的來(lái)書(shū)寫(xiě),并添加到全局是有點(diǎn)麻煩。不如寫(xiě)一個(gè)腳本放在 /etc/crond.daily目錄中。然后把其權(quán)限設(shè)置為755 (關(guān)于權(quán)限的設(shè)置,請(qǐng)參考:《Linux 文件和目錄的屬性》)。

當(dāng)然我們得改一改上面的 帶有/etc/cron.daily那行,改為如下;

10 5 * * * root run-parts /etc/cron.daily
</cdoe>

然后我們到/etc/crond.daily目錄中創(chuàng)建兩個(gè)文件,一個(gè)是用來(lái)重啟httpd服務(wù)器的,如下;

<code>
[root@localhost cron.daily]# touch httpd.sh
[root@localhost cron.daily]# chmod 755 httpd.sh
[root@localhost cron.daily]# echo "/etc/init.d/httpd restart" > httpd.sh
[root@localhost cron.daily]# more httpd.sh
/etc/init.d/httpd restart

如果我想在每天5點(diǎn)20分下載FC5的鏡像,可以再創(chuàng)建一個(gè)文件fc5down.sh

[root@localhost cron.daily]# touch fc5down.sh
[root@localhost cron.daily]# chmod 755 fc5down.sh
[root@localhost cron.daily]# echo "/usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso" > fc5down.sh
[root@localhost cron.daily]# more fc5down.sh
/usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

然后我們重新啟動(dòng)一下crond就行了;

[root@localhost cron.daily]# pkill crond
[root@localhost cron.daily]# prep crond
[root@localhost cron.daily]# crond&

注意:我只是想說(shuō)明一下,在同一時(shí)間 執(zhí)行多個(gè)計(jì)劃任務(wù)的簡(jiǎn)單用法,并不是有意教給您每天早上都下載FC5的映像。我舉這個(gè)例子是為了初學(xué)者了解這個(gè)功能。如果您有好多的任務(wù)在某一時(shí)刻執(zhí)行, 那就自己寫(xiě)腳本文件。放在/etc目錄下的cron.hourly 、cron.daily 、cron.weekly 、cron.monthly 目錄中。凡是放進(jìn)這些目錄的可執(zhí)行腳本,都能在約定的時(shí)間內(nèi)準(zhǔn)確執(zhí)行。每個(gè)目錄有每個(gè)目錄的用途;


2.2.4 對(duì)于用戶自身的cron 配置文件的說(shuō)明;

每個(gè)用戶都有自己的cron配置文件,通過(guò)crontab -e 就可以編輯,一般的情況下,在Fedora和Redhat的發(fā)行版,我們編輯好用戶的cron配置文件保存退出后,系統(tǒng)會(huì)自動(dòng)就存放于/var /spool/cron/目錄中,文件以用戶名命名。在Slackware中是位于/var/spool/cron/crontabs/目錄中。其它的發(fā) 行版都差不多,有點(diǎn)類似。自己找找吧;查看用戶的計(jì)劃任務(wù)是crontab -l

crontab -e 注:編輯用戶的cron配置文件;
crontab -l 注:查看用戶的計(jì)劃任務(wù);

比如我用beinan用戶來(lái)運(yùn)行crontab -e ;

[beinan@localhost ~]$ id 注:判斷所用用戶身份;
uid=500(beinan) gid=500(beinan) groups=500(beinan)

[beinan@localhost ~]$ crontab -e 注:編輯用戶beinan的計(jì)劃任務(wù);

我們?cè)诶锩娑x一個(gè)任務(wù);

40 20 * * * /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

保存退出后,我們用下面的命令來(lái)查看beinan用戶的計(jì)劃任務(wù);

[beinan@localhost ~]$ crontab -l

40 20 * * * /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

配置好后,我們還要重新啟動(dòng)crond服務(wù)器,每個(gè)用戶cron配置文件的改動(dòng)都得重新啟動(dòng)crond服務(wù)器;前面已經(jīng)說(shuō)過(guò)了,這里省略;值得注意的是重啟crond服務(wù)器,需要root權(quán)限,您可以用su命令切換到root 用戶,然后再來(lái)重啟crond;


在Fedora或Redhat等以RPM包管理的發(fā)行版中;

[beinan@localhost ~]$ su
口令:
[root@localhost beinan]# /etc/init.d/crond restart
停止 crond: [確定]
啟動(dòng) crond: [確定]


也可以先殺死crond,再運(yùn)行crond命令的辦法來(lái)啟動(dòng);

[root@localhost beinan]# pkill crond
[root@localhost beinan]# pgrep crond
[root@localhost beinan]# /usr/sbin/crond
[root@localhost beinan]# pgrep crond
6664


3、計(jì)劃任務(wù)的應(yīng)用范圍;

計(jì)劃任務(wù)主要是讓系統(tǒng)自動(dòng)完成一些工作。比如我們可以讓系統(tǒng)自動(dòng)在某一時(shí)刻清理或備份httpd服務(wù)器的日志,然后重新啟動(dòng)httpd服務(wù)器,這對(duì)網(wǎng)絡(luò)管理員來(lái)說(shuō)是很重要的。也可以讓系統(tǒng)自動(dòng)清空位于/tmp目錄的垃圾文件。

另外值得一提的是,LinuxSir.Org 有很多子站,每個(gè)子站都有RSS,能讓這些站點(diǎn)的RSS相互投遞,也是用cron來(lái)完成,比如是在早上4點(diǎn)左右開(kāi)始執(zhí)行這個(gè)任務(wù)。這是一個(gè)極為耗費(fèi)資源的 過(guò)程,如果不是放在在線人少的時(shí)候,基本無(wú)法完成,所以只能放在早上進(jìn)行。作為SIR的管理員,不可能每天早上4點(diǎn)起來(lái)點(diǎn)鼠標(biāo)來(lái)完成這些事吧。所以最好的 辦法就是通過(guò)cron來(lái)自動(dòng)運(yùn)行,以在服務(wù)器最清閑的時(shí)候來(lái)完成這項(xiàng)工作;

總結(jié)

以上是生活随笔為你收集整理的linux 计划任务 cron 全攻略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。