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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux 计划任务格式,linux crontab 定时任务格式和使用方法2019-01-13

發(fā)布時(shí)間:2023/12/10 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 计划任务格式,linux crontab 定时任务格式和使用方法2019-01-13 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前一天學(xué)習(xí)了 at 命令是針對(duì)僅運(yùn)行一次的任務(wù),循環(huán)運(yùn)行的例行性計(jì)劃任務(wù),linux系統(tǒng)則是由 cron (crond) 這個(gè)系統(tǒng)服務(wù)來(lái)控制的。Linux 系統(tǒng)上面原本就有非常多的計(jì)劃性工作,因此這個(gè)系統(tǒng)服務(wù)是默認(rèn)啟動(dòng)的。另外, 由于使用者自己也可以設(shè)置計(jì)劃任務(wù),所以, Linux 系統(tǒng)也提供了使用者控制計(jì)劃任務(wù)的命令 :crontab 命令。

一、crond簡(jiǎn)介

crond是linux下用來(lái)周期性的執(zhí)行某種任務(wù)或等待處理某些事件的一個(gè)守護(hù)進(jìn)程,與windows下的計(jì)劃任務(wù)類(lèi)似,當(dāng)安裝完成操作系統(tǒng)后,默認(rèn)會(huì)安裝此服務(wù)工具,并且會(huì)自動(dòng)啟動(dòng)crond進(jìn)程,crond進(jìn)程每分鐘會(huì)定期檢查是否有要執(zhí)行的任務(wù),如果有要執(zhí)行的任務(wù),則自動(dòng)執(zhí)行該任務(wù)。

Linux下的任務(wù)調(diào)度分為兩類(lèi),系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度。

系統(tǒng)任務(wù)調(diào)度:系統(tǒng)周期性所要執(zhí)行的工作,比如寫(xiě)緩存數(shù)據(jù)到硬盤(pán)、日志清理等。在/etc目錄下有一個(gè)crontab文件,這個(gè)就是系統(tǒng)任務(wù)調(diào)度的配置文件。

/etc/crontab文件包括下面幾行:

[root@localhost ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=""HOME=/

# run-parts

51 * * * * root run-parts /etc/cron.hourly

24 7 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

[root@localhost ~]#

前四行是用來(lái)配置crond任務(wù)運(yùn)行的環(huán)境變量,第一行SHELL變量指定了系統(tǒng)要使用哪個(gè)shell,這里是bash,第二行PATH變量指定了系統(tǒng)執(zhí)行命令的路徑,第三行MAILTO變量指定了crond的任務(wù)執(zhí)行信息將通過(guò)電子郵件發(fā)送給root用戶,如果MAILTO變量的值為空,則表示不發(fā)送任務(wù)執(zhí)行信息給用戶,第四行的HOME變量指定了在執(zhí)行命令或者腳本時(shí)使用的主目錄。第六至九行表示的含義將在下個(gè)小節(jié)詳細(xì)講述。這里不在多說(shuō)。

用戶任務(wù)調(diào)度:用戶定期要執(zhí)行的工作,比如用戶數(shù)據(jù)備份、定時(shí)郵件提醒等。用戶可以使用 crontab 工具來(lái)定制自己的計(jì)劃任務(wù)。所有用戶定義的crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致。

使用者權(quán)限文件:

文件:

說(shuō)明:

/etc/cron.deny

該文件中所列用戶不允許使用crontab命令

/etc/cron.allow

該文件中所列用戶允許使用crontab命令

/var/spool/cron/

所有用戶crontab文件存放的目錄,以用戶名命名

crontab文件的含義:

用戶所建立的crontab文件中,每一行都代表一項(xiàng)任務(wù),每行的每個(gè)字段代表一項(xiàng)設(shè)置,它的格式共分為六個(gè)字段,前五段是時(shí)間設(shè)定段,第六段是要執(zhí)行的命令段,格式如下:

minute hour day month week command

含義:

minute: 表示分鐘,可以是從0到59之間的任何整數(shù)。

hour:表示小時(shí),可以是從0到23之間的任何整數(shù)。

day:表示日期,可以是從1到31之間的任何整數(shù)。

month:表示月份,可以是從1到12之間的任何整數(shù)。

week:表示星期幾,可以是從0到7之間的任何整數(shù),這里的0或7代表星期日。

command:要執(zhí)行的命令,可以是系統(tǒng)命令,也可以是自己編寫(xiě)的腳本文件。

crontab格式說(shuō)明

在以上各個(gè)字段中,還可以使用以下特殊字符:

星號(hào)(*):代表所有可能的值,例如month字段如果是星號(hào),則表示在滿足其它字段的制約條件后每月都執(zhí)行該命令操作。

逗號(hào)(,):可以用逗號(hào)隔開(kāi)的值指定一個(gè)列表范圍,例如,“1,2,5,7,8,9”

中杠(-):可以用整數(shù)之間的中杠表示一個(gè)整數(shù)范圍,例如“2-6”表示“2,3,4,5,6”

正斜線(/):可以用正斜線指定時(shí)間的間隔頻率,例如“0-23/2”表示每?jī)尚r(shí)執(zhí)行一次。同時(shí)正斜線可以和星號(hào)一起使用,例如*/10,如果用在minute字段,表示每十分鐘執(zhí)行一次。

二、crond服務(wù)

安裝crontab:

yum install crontabs

服務(wù)操作說(shuō)明:

centos7格式改用systemctl進(jìn)行控制

/sbin/service crond start//啟動(dòng)服務(wù)

systemctl start crond.service

/sbin/service crond stop//關(guān)閉服務(wù)

/sbin/service crond restart//重啟服務(wù)

/sbin/service crond reload//重新載入配置

查看crontab服務(wù)狀態(tài):

service crond status

手動(dòng)啟動(dòng)crontab服務(wù):

service crond start

查看crontab服務(wù)是否已設(shè)置為開(kāi)機(jī)啟動(dòng),執(zhí)行命令:

ntsysv

加入開(kāi)機(jī)自動(dòng)啟動(dòng):

chkconfig –level 35 crond on補(bǔ)充centso7操作

systemctl start crond.service 啟動(dòng)服務(wù)

systemctl stop crond.service 停止服務(wù)

systemctl restart crond.service 重啟服務(wù)

systemctl reload crond.service 重載配置

systemctl status crond.service 查看啟動(dòng)狀態(tài)

systemctl enable crond.service 設(shè)置開(kāi)機(jī)自啟

三、crontab命令詳解

1.命令格式:

crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

2.命令功能:

通過(guò)crontab 命令,我們可以在固定的間隔時(shí)間執(zhí)行指定的系統(tǒng)指令或 shell script腳本。時(shí)間間隔的單位可以是分鐘、小時(shí)、日、月、周及以上的任意組合。這個(gè)命令非常設(shè)合周期性的日志分析或數(shù)據(jù)備份等工作。

3.命令參數(shù):

-u user:用來(lái)設(shè)定某個(gè)用戶的crontab服務(wù),例如,“-u ixdba”表示設(shè)定ixdba用戶的crontab服務(wù),此參數(shù)一般有root用戶來(lái)運(yùn)行。

file:file是命令文件的名字,表示將file做為crontab的任務(wù)列表文件并載入crontab。如果在命令行中沒(méi)有指定這個(gè)文件,crontab命令將接受標(biāo)準(zhǔn)輸入(鍵盤(pán))上鍵入的命令,并將它們載入crontab。

-e:編輯某個(gè)用戶的crontab文件內(nèi)容。如果不指定用戶,則表示編輯當(dāng)前用戶的crontab文件。

-l:顯示某個(gè)用戶的crontab文件內(nèi)容,如果不指定用戶,則表示顯示當(dāng)前用戶的crontab文件內(nèi)容。

-r:從/var/spool/cron目錄中刪除某個(gè)用戶的crontab文件,如果不指定用戶,則默認(rèn)刪除當(dāng)前用戶的crontab文件。

-i:在刪除用戶的crontab文件時(shí)給確認(rèn)提示。

4.常用方法:

1). 創(chuàng)建一個(gè)新的crontab文件

在考慮向cron進(jìn)程提交一個(gè)crontab文件之前,首先要做的一件事情就是設(shè)置環(huán)境變量EDITOR。cron進(jìn)程根據(jù)它來(lái)確定使用哪個(gè)編輯器編輯crontab文件。9 9 %的UNIX和LINUX用戶都使用vi,如果你也是這樣,那么你就編輯$ HOME目錄下的. profile文件,在其中加入這樣一行:

EDITOR=vi; export EDITOR

然后保存并退出。不妨創(chuàng)建一個(gè)名為 cron的文件,其中是用戶名,例如, davecron。在該文件中加入如下的內(nèi)容。

# (put your own initials here)echo the date to the console every

# 15minutes between 6pm and 6am

0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console

保存并退出。確信前面5個(gè)域用空格分隔。

在上面的例子中,系統(tǒng)將每隔1 5分鐘向控制臺(tái)輸出一次當(dāng)前時(shí)間。如果系統(tǒng)崩潰或掛起,從最后所顯示的時(shí)間就可以一眼看出系統(tǒng)是什么時(shí)間停止工作的。在有些系統(tǒng)中,用tty1來(lái)表示控制臺(tái),可以根據(jù)實(shí)際情況對(duì)上面的例子進(jìn)行相應(yīng)的修改。為了提交你剛剛創(chuàng)建的crontab文件,可以把這個(gè)新創(chuàng)建的文件作為cron命令的參數(shù):

$ crontab davecron

現(xiàn)在該文件已經(jīng)提交給cron進(jìn)程,它將每隔1 5分鐘運(yùn)行一次。

同時(shí),新創(chuàng)建文件的一個(gè)副本已經(jīng)被放在/var/spool/cron目錄中,文件名就是用戶名(即dave)。

2). 列出crontab文件

為了列出crontab文件,可以用:

$ crontab -l

0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty1

你將會(huì)看到和上面類(lèi)似的內(nèi)容。可以使用這種方法在$ H O M E目錄中對(duì)crontab文件做一備份:

$ crontab -l > $HOME/mycron

這樣,一旦不小心誤刪了crontab文件,可以用上一節(jié)所講述的方法迅速恢復(fù)。

3). 編輯crontab文件

如果希望添加、刪除或編輯crontab文件中的條目,而E D I TO R環(huán)境變量又設(shè)置為v i,那么就可以用v i來(lái)編輯crontab文件,相應(yīng)的命令為:

$ crontab -e

可以像使用v i編輯其他任何文件那樣修改crontab文件并退出。如果修改了某些條目或添加了新的條目,那么在保存該文件時(shí), c r o n會(huì)對(duì)其進(jìn)行必要的完整性檢查。如果其中的某個(gè)域出現(xiàn)了超出允許范圍的值,它會(huì)提示你。

我們?cè)诰庉媍rontab文件時(shí),沒(méi)準(zhǔn)會(huì)加入新的條目。例如,加入下面的一條:

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month

30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

現(xiàn)在保存并退出。最好在crontab文件的每一個(gè)條目之上加入一條注釋,這樣就可以知道它的功能、運(yùn)行時(shí)間,更為重要的是,知道這是哪位用戶的作業(yè)。

現(xiàn)在讓我們使用前面講過(guò)的crontab -l命令列出它的全部信息:

$ crontab -l

# (crondave installed on Tue May 4 13:07:43 1999)

# DT:ech the date to the console every 30 minites

0,15,30,45 18-06 * * * /bin/echo date > /dev/tty1

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month

30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

4). 刪除crontab文件

要?jiǎng)h除crontab文件,可以用:

$ crontab -r

5). 恢復(fù)丟失的crontab文件

如果不小心誤刪了crontab文件,假設(shè)你在自己的$ H O M E目錄下還有一個(gè)備份,那么可以將其拷貝到/var/spool/cron/,其中是用戶名。如果由于權(quán)限問(wèn)題無(wú)法完成拷貝,可以用:

$ crontab

其中,是你在$ H O M E目錄中副本的文件名。

我建議你在自己的$ H O M E目錄中保存一個(gè)該文件的副本。我就有過(guò)類(lèi)似的經(jīng)歷,有數(shù)次誤刪了crontab文件(因?yàn)閞鍵緊挨在e鍵的右邊)。這就是為什么有些系統(tǒng)文檔建議不要直接編輯crontab文件,而是編輯該文件的一個(gè)副本,然后重新提交新的文件。

有些crontab的變體有些怪異,所以在使用crontab命令時(shí)要格外小心。如果遺漏了任何選項(xiàng),crontab可能會(huì)打開(kāi)一個(gè)空文件,或者看起來(lái)像是個(gè)空文件。這時(shí)敲delete鍵退出,不要按,否則你將丟失crontab文件。

5.使用實(shí)例

實(shí)例:

命令:

* * * * * command

實(shí)例1:每1分鐘執(zhí)行一次command

3,15 * * * * command

實(shí)例2:每小時(shí)的第3和第15分鐘執(zhí)行

3,15 8-11 * * * command

實(shí)例3:在上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行

3,15 8-11 */2 * * command

實(shí)例4:每隔兩天的上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行

3,15 8-11 * * 1 command

實(shí)例5:每個(gè)星期一的上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行

30 21 * * * /etc/init.d/smb restart

實(shí)例6:每晚的21:30重啟smb

45 4 1,10,22 * * /etc/init.d/smb restart

實(shí)例7:每月1、10、22日的4 : 45重啟smb

10 1 * * 6,0 /etc/init.d/smb restart

實(shí)例8:每周六、周日的1 : 10重啟smb

0,30 18-23 * * * /etc/init.d/smb restart

實(shí)例9:每天18 : 00至23 : 00之間每隔30分鐘重啟smb

0 23 * * 6 /etc/init.d/smb restart

實(shí)例10:每星期六的晚上11 : 00 pm重啟smb

* */1 * * * /etc/init.d/smb restart

實(shí)例11:每一小時(shí)重啟smb

* 23-7/1 * * * /etc/init.d/smb restart

實(shí)例12:晚上11點(diǎn)到早上7點(diǎn)之間,每隔一小時(shí)重啟smb

0 11 4 * mon-wed /etc/init.d/smb restart

實(shí)例13:每月的4號(hào)與每周一到周三的11點(diǎn)重啟smb

0 4 1 jan * /etc/init.d/smb restart

實(shí)例14:一月一號(hào)的4點(diǎn)重啟smb

01 * * * * root run-parts /etc/cron.hourly

實(shí)例15:每小時(shí)執(zhí)行/etc/cron.hourly目錄內(nèi)的腳本

不能漏了run-parts這個(gè)參數(shù),如果去掉這個(gè)參數(shù)的話,后面就可以寫(xiě)要運(yùn)行的某個(gè)腳本名,而不是目錄名了

四、使用注意事項(xiàng)

1. 注意環(huán)境變量問(wèn)題

有時(shí)我們創(chuàng)建了一個(gè)crontab,但是這個(gè)任務(wù)卻無(wú)法自動(dòng)執(zhí)行,而手動(dòng)執(zhí)行這個(gè)任務(wù)卻沒(méi)有問(wèn)題,這種情況一般是由于在crontab文件中沒(méi)有配置環(huán)境變量引起的。

在crontab文件中定義多個(gè)調(diào)度任務(wù)時(shí),需要特別注意的一個(gè)問(wèn)題就是環(huán)境變量的設(shè)置,因?yàn)槲覀兪謩?dòng)執(zhí)行某個(gè)任務(wù)時(shí),是在當(dāng)前shell環(huán)境下進(jìn)行的,程序當(dāng)然能找到環(huán)境變量,而系統(tǒng)自動(dòng)執(zhí)行任務(wù)調(diào)度時(shí),是不會(huì)加載任何環(huán)境變量的,因此,就需要在crontab文件中指定任務(wù)運(yùn)行所需的所有環(huán)境變量,這樣,系統(tǒng)執(zhí)行任務(wù)調(diào)度時(shí)就沒(méi)有問(wèn)題了。

不要假定cron知道所需要的特殊環(huán)境,它其實(shí)并不知道。所以你要保證在shelll腳本中提供所有必要的路徑和環(huán)境變量,除了一些自動(dòng)設(shè)置的全局變量。所以注意如下3點(diǎn):

1)腳本中涉及文件路徑時(shí)寫(xiě)全局路徑;

2)腳本執(zhí)行要用到j(luò)ava或其他環(huán)境變量時(shí),通過(guò)source命令引入環(huán)境變量,如:

cat start_cbp.sh

#!/bin/sh

source /etc/profile

export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

/usr/local/jboss-4.0.5/bin/run.sh -c mev &

3)當(dāng)手動(dòng)執(zhí)行腳本OK,但是crontab死活不執(zhí)行時(shí)。這時(shí)必須大膽懷疑是環(huán)境變量惹的禍,并可以嘗試在crontab中直接引入環(huán)境變量解決問(wèn)題。如:

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

2. 注意清理系統(tǒng)用戶的郵件日志

每條任務(wù)調(diào)度執(zhí)行完畢,系統(tǒng)都會(huì)將任務(wù)輸出信息通過(guò)電子郵件的形式發(fā)送給當(dāng)前系統(tǒng)用戶,這樣日積月累,日志信息會(huì)非常大,可能會(huì)影響系統(tǒng)的正常運(yùn)行,因此,將每條任務(wù)進(jìn)行重定向處理非常重要。

例如,可以在crontab文件中設(shè)置如下形式,忽略日志輸出:

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

“/dev/null 2>&1”表示先將標(biāo)準(zhǔn)輸出重定向到/dev/null,然后將標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出,由于標(biāo)準(zhǔn)輸出已經(jīng)重定向到了/dev/null,因此標(biāo)準(zhǔn)錯(cuò)誤也會(huì)重定向到/dev/null,這樣日志輸出問(wèn)題就解決了。

3. 系統(tǒng)級(jí)任務(wù)調(diào)度與用戶級(jí)任務(wù)調(diào)度

系統(tǒng)級(jí)任務(wù)調(diào)度主要完成系統(tǒng)的一些維護(hù)操作,用戶級(jí)任務(wù)調(diào)度主要完成用戶自定義的一些任務(wù),可以將用戶級(jí)任務(wù)調(diào)度放到系統(tǒng)級(jí)任務(wù)調(diào)度來(lái)完成(不建議這么做),但是反過(guò)來(lái)卻不行,root用戶的任務(wù)調(diào)度操作可以通過(guò)“crontab –uroot –e”來(lái)設(shè)置,也可以將調(diào)度任務(wù)直接寫(xiě)入/etc/crontab文件,需要注意的是,如果要定義一個(gè)定時(shí)重啟系統(tǒng)的任務(wù),就必須將任務(wù)放到/etc/crontab文件,即使在root用戶下創(chuàng)建一個(gè)定時(shí)重啟系統(tǒng)的任務(wù)也是無(wú)效的。

4. 其他注意事項(xiàng)

新創(chuàng)建的cron job,不會(huì)馬上執(zhí)行,至少要過(guò)2分鐘才執(zhí)行。如果重啟cron則馬上執(zhí)行。

當(dāng)crontab突然失效時(shí),可以嘗試/etc/init.d/crond restart解決問(wèn)題。或者查看日志看某個(gè)job有沒(méi)有執(zhí)行/報(bào)錯(cuò)tail -f /var/log/cron。

千萬(wàn)別亂運(yùn)行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除用戶的Crontab文件。刪除了該用戶的所有crontab都沒(méi)了。

在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進(jìn)行轉(zhuǎn)義%,如經(jīng)常用的date ‘+%Y%m%d’在crontab里是不會(huì)執(zhí)行的,應(yīng)該換成date ‘+%Y%m%d’。

總結(jié)

以上是生活随笔為你收集整理的linux 计划任务格式,linux crontab 定时任务格式和使用方法2019-01-13的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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