Linux配置定时职分详解,定时任务

By admin in 美高梅手机版4858 on 2019年3月31日

12.1 配置定时职分

率先需弄清的定义:

(1).crond是二个daemon类程序,路径为/usr/sbin/crond。暗中同意会今后台措施运行,service或systemd格局运行crond暗中同意也是后台格局的。

(2).crondtab是治本crontab file的工具,而crontab
file是概念定时职分条指标公文。

(3).crontab
file存在于多处,包蕴系统定时任务文件/etc/crontab和/etc/cron.d/*,还有独属于各用户的职责文件/var/spool/cron/USE奥迪Q5NAME。

再就是crontab命令:

-l:列出定时任务条目
-r:删除当前任务列表终端所有任务条目
-i:删除条目时提示是否真的要删除
-e:编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件
-u:操作指定用户的定时任务

实践crontab -e命令编辑当前用户的crontab
file,例如当前为root用户,则编辑的是/var/spool/cron/root文件。例如写入下边这一行。

* * * * * /bin/echo "the first cron entry"  >>/tmp/crond.txt

那将会每分钟实施3次echo命令,将内容增添到/tmp/crond.txt文件中。

任务布置中的职务条目怎样定义,能够查看/etc/crontab文件。

[root@server2 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

在此文件中定义了3个变量,在那之中贰个是PATH,该变量极其首要。在最后还交到了职务条目标概念情势:

(1).每种职责条目分为6段,每段以空格分隔,之所以此处多了user-name段是因为/etc/crontab为系统定时任务文件,而相似定时职务是平昔不应当段的。

(2).前五段为时间的设定段,分别代表”分时日月周”,它们的概念无法凌驾合理值范围,第四段为所要执行的一声令下或脚本职责段。

(3).在岁月概念段中,使用”*”表示每单位,即每分钟,每小时,每一日,每月,周周几(还是是每天)。

(4).各类时间段中,都得以使用逗号”,”来表示枚举,例如定义”0,30,50 * * *
*”表示各个时刻的整点、第36分钟和第六十六分钟都履行该义务。

(5).每一种时刻段中,都得以利用”-“定义范围,可以构成逗号使用。如分钟段定义了”00,20-30,50″表示每一个日子的整点、第一0到三十几分钟的每分钟、第④十九分钟都推行该义务。

(6).各个日子段中,使用”/”表示忽略时间,如在时辰段定义了”0-13/2″表示在”0/1/2/6/4/5/12″点才知足时间概念。常动用”*/N”表示每隔多长时间的意思。例如”00
*/2 * * *”表示在每一天每隔两小时的整点执行该职务。

(7).假使定义的日和周争论了,则会反复实行(不包罗因为*号导致的龃龉)。例如每月的15号实施该义务,同时又定义了周四执行该职务,符合规律无争执情状下,将在周四和每月15号执行,但只要某月的15号还若是周日,则该职责在此日执行四遍。由此,应该大力制止同时定义周和日的任务。

(8).命令段(即第肆段)中,无法随随便便现身百分号”%”,因为它表示换行的特有含义,且首个%后的富有字符串将作为命令的标准输入。

譬如下边包车型地铁概念:

* * * * * /bin/cat >>/tmp/crond.txt %"the first %%cron entry%"

该职分输出的结果将是:

"the first

cron entry
"

因此,在定时职分条目中若以时间概念文件名时,应当将%使用反斜杠转义。如:

* * * * * cp /etc/fstab /tmp/`date +\%Y-\%m-\%d`.txt

除此以外三个内需留意的年华段设置是,使用*号导致低级其他年月覆盖高级其余岁月。例如”*
*/2 * *
*”,它不表示每两钟头实施二遍职务,而是每分钟实施2回,纵然在小时位上设置了每隔两钟头,但在分钟位上安装的是每分钟,所以它照旧表示每分钟实施3次职务。同理,”*/5
*/2 * *
*”分钟位上的安装覆盖小时位上的装置,表示每五分钟实施一遍而忽略小时位的设置;”00
*/2 */5 *
*”表示每隔两时辰的整点执行二回职责而忽略天数位的装置。

第③2章 定时职责,第22章职责


正文目录:

12.1 配置定时职分

12.2 crontab file

12.3 crond命令的调节和测试

12.4 精确到秒的天职陈设



Linux crontab 命令用法详情及示范,linuxcrontab

Linux系统则是由 cron (crond) 那几个系统服务来支配的。Linux
系统方面原本就有那几个多的筹划工作,因而那些系列服务是暗中同意运转的。其余,
由于使用者本人也能够安装安插职责,所以, Linux
系统也提供了使用者控制布置任务的命令 :crontab
命令[@[email protected]]

一、crond简介

crond是Linux下用来周期性的施行某种职分或等候处理有个别事件的2个看护进程,与windows下的布署职责类似,当安装完毕操作系统后,默许会安装此服务工具,并且会自行运营crond进度,crond进度每秒钟会定期检查是还是不是有要推行的天职,要是有要推行的职分,则自动执行该职分。

Linux下的职责调度分为两类,系统职责调度和用户义务调度。

系统职分调度:系统周期性所要执行的劳作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有贰个crontab文件,那么些正是系统职责调度的布署文件

/etc/crontab文件包涵下边几行:

[[email protected]
~]# 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

[[email protected]
~]#

前四行是用来陈设crond义务运行的环境变量,第壹行SHELL变量钦定了系统要使用哪个shell,那里是bash,第①行PATH变量钦赐了系统执行命令的路线,第叁行MAILTO变量钦命了crond的任务履行音讯将由此电子邮件发送给root用户,倘若MAILTO变量的值为空,则意味不发送职分履行新闻给用户,第六行的HOME变量内定了在执行命令可能脚本时采取的主目录。第⑤至九行表示的意思将在下个小节详细描述。那里不在多说。

用户任务调度:用户定期要履行的行事,比如用户数据备份、定时邮件提示等。用户能够选择crontab 工具来定制本身的陈设职务。全数用户定义的crontab 文件都被保留在
/var/spool/cron目录中。其文件名与用户名相同。

使用者权限文件:

文件:

/etc/cron.deny

说明:

该公文中所列用户分化意采用crontab命令

文件:

/etc/cron.allow

说明:

该公文中所列用户同意行使crontab命令

文件:

/var/spool/cron/

说明:

全数用户crontab文件存放的目录,以用户名命名

crontab文件的含义:

用户所建立的crontab文件中,每一行都意味一项职责,每行的各种字段代表一项设置,它的格式共分为多个字段,前五段是岁月设定段,第4段是要执行的命令段,格式如下:

minute hour day month weekcommand

其中:

minute:表示分钟,能够是从0到59之内的其他整数。

hour:表示小时,能够是从0到23里边的任何整数。

day:表示日期,能够是从1到31以内的别的整数。

month:表示月份,能够是从1到1第22中学间的任何整数。

week:表示星期几,能够是从0到7里头的别样整数,那里的0或7代表周五。

command:要举办的命令,能够是系统命令,也得以是温馨编写的台本文件。

在以上各个字段中,还是能运用以下特殊字符:

星号(*):代表全体可能的值,例如month字段就算是星号,则意味在满意别的字段的钳制条件后每月都施行该命令操作。

逗号(,):可以用逗号隔离的值钦点一个列表范围,例如,“1,2,5,7,8,9”

Linux配置定时职分详解,定时任务。中杠(-):能够用整数之间的中杠表示二个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):能够用正斜线钦定时间的间距频率,例如“0-23/2”表示每两小时实施二遍。同时正斜线能够和星号一起利用,例如*/10,倘使用在minute字段,表示每十秒钟实施三次。

二、crond服务

安装crontab:

yum install crontabs

劳动操作表明:

/sbin/service crond start //运转服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

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

翻开crontab服务情形:

service crond status

手动运维crontab服务:

service crond start

翻开crontab服务是不是已安装为开机运行,执行命令:

ntsysv

加盟开机自动运维:

chkconfig –level 35 crond on

三 、crontab命令详解

1.命令格式:

crontab [-u user] file

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

2.限令功用:

经过crontab命令,大家得以在稳定的间隔时间执行钦定的系统指令或 shell
script脚本。时间间隔的单位能够是分钟、时辰、日、月、周及以上的私行己组建合。这几个命令分外设合周期性的日记分析或数据备份等工作。

3.下令参数:

-u user:用来设定某些用户的crontab服务,例如,“-u
ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运营。

file:file是命令文件的名字,表示将file做为crontab的天职列表文件并载入crontab。即便在命令行中没有点名这么些文件,crontab命令将收受正规输入(键盘)上键入的指令,并将它们载入crontab。

-e:编辑有些用户的crontab文件内容。假如不钦定用户,则意味着编辑当前用户的crontab文件。

-l:彰显有些用户的crontab文件内容,如若不钦赐用户,则意味着展现当前用户的crontab文件内容。

-r:从/var/spool/cron目录中去除有个别用户的crontab文件,如若不点名用户,则默许删除当前用户的crontab文件。

-i:在剔除用户的crontab文件时给确认提示。

4.常用艺术:

1). 创立一个新的crontab文件

在考虑向cron进度提交贰个crontab文件在此以前,首先要做的一件事情就是设置条件变量EDITO本田UR-V。cron进度依照它来分明使用哪个编辑器编辑crontab文件。9
9 %的UNIX和Linux用户都利用vi,假如您也是那般,那么您就编写$
HOME目录下的. profile文件,在中间出席这么一行:

EDITOR=vi; export EDITOR

下一场保留并退出。不要紧创造一个名为cron的文本,个中是用户名,例如,davecron。在该公文中投入如下的始末。

# (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

保留并脱离。确信前边6个域用空格分隔。

在地方的事例中,系统将每隔1
4分钟向决定台出口二遍当前时光。要是系统崩溃或挂起,从最终所呈现的时刻就足以一眼看出系统是什么时间结束工作的。在多少系统中,用tty1来表示控制台,能够根据实际意况对地点的例证进行对应的改动。为了提交你碰巧成立的crontab文件,能够把那一个新成立的公文作为cron命令的参数:

$ crontab davecron

前几日该文件已经提交给cron进度,它将每隔1 六分钟运营三遍。

与此同时,新制造文件的1个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。

crontab 命令用法详情及示范,linuxcrontab
Linux系统则是由 cron (crond) 那个类别服务来支配的。Linux
系统方面原本就有十一分多的设计工作,…

12.2 crondtab file

crondtab file为天职定义文件。

(1).在此文件中,空行会被忽视,首个非空白字符且以#发端的表现注释行,但#不可能冒出在行中。

(2).可以在crontab
file中安装环境变量,方式为”name=value”,等号两边的空格可随心所欲,即”name =
value”也是同意的。但value中出现的空格必须采用引号包围。

(3). 暗中同意crond命令运维的时候会先河化全体变量,除了某多少个变量会被crond
daemon自动安装好,别的具备变量都被设置为空值。自动安装的变量包蕴SHELL=/bin/sh,以及HOME和LOGNAME(在CentOS上则称为USELX570),后双边将被私下认可设置为/etc/passwd中内定的值。在那之中SHELL和HOME能够被crontab
file中自定义的变量覆盖,但LOGNAME不允许覆盖。当然,自行定义的变量也会被加载到内部存储器。

(4).除了LOGNAME/HOME/SHELL变量之外,即使设置了发送邮件,则crond还会招来MAILTO变量。假诺设置了MAILTO,则邮件将发送给此变量钦赐的地址,若是MAILTO定义的值为空(MAILTO=””),将不发送邮件,别的具有景况邮件都会发送给crontab
file的主人。

(5).在系统定时职责文件/etc/crontab中,默许已定义PATH环境变量和SHELL环境变量,在那之中PATH=/sbin:/bin:/usr/sbin:/usr/bin。

(6).crond daemon每分钟检查和测试二回crontab file看是或不是有职责安排条目需求实施。

12.1 配置定时义务

先是需弄清的定义:

(1).crond是一个daemon类程序,路径为/usr/sbin/crond。私下认可会未来台措施运行,service或systemd格局运转crond默许也是后台方式的。

(2).crondtab是管制crontab file的工具,而crontab
file是概念定时职责条目标文书。

(3).crontab
file存在于多处,包涵系统定时职分文件/etc/crontab和/etc/cron.d/*,还有独属于各用户的职分文件/var/spool/cron/USEOdysseyNAME。

再就是crontab命令:

-l:列出定时任务条目
-r:删除当前任务列表终端所有任务条目
-i:删除条目时提示是否真的要删除
-e:编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件
-u:操作指定用户的定时任务

推行crontab -e命令编辑当前用户的crontab
file,例如当前为root用户,则编辑的是/var/spool/cron/root文件。例如写入下边这一行。

* * * * * /bin/echo "the first cron entry"  >>/tmp/crond.txt

那将会每分钟实施一遍echo命令,将内容充实到/tmp/crond.txt文件中。

任务布置中的职分条目如何定义,能够查看/etc/crontab文件。

[[email protected] ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

在此文件中定义了三个变量,当中3个是PATH,该变量极其首要。在最终还交到了职分条目标定义方式:

(1).每一种职分条目分为6段,每段以空格分隔,之所以此处多了user-name段是因为/etc/crontab为系统定时职务文件,而相似定时职务是从未有过该段的。

(2).前五段为时间的设定段,分别代表”分时日月周”,它们的定义无法凌驾合理值范围,第伍段为所要执行的命令或脚本职责段。

(3).在时光概念段中,使用”*”表示每单位,即每分钟,每小时,天天,每月,每一周几(还是是每一日)。

(4).每种时间段中,都得以选取逗号”,”来代表枚举,例如定义”0,30,50 * * *
*”表示各个日子的整点、第贰十几分钟和第⑥十八分钟都实施该任务。

(5).每种时刻段中,都得以应用”-“定义范围,能够构成逗号使用。如分钟段定义了”00,20-30,50″表示各样时刻的整点、第二0到二十九秒钟的每分钟、第四十多分钟都履行该职责。

(6).各个时间段中,使用”/”表示忽略时间,如在时辰段定义了”0-13/2″表示在”0/1/2/6/4/5/12″点才满足时间概念。常选取”*/N”表示每隔多长时间的情趣。例如”00
*/2 * * *”表示在每天每隔两小时的整点执行该职责。

(7).倘诺定义的日和周争执了,则会反复履行(不包涵因为*号导致的争持)。例如每月的15号执行该职责,同时又定义了星期天执行该职分,符合规律无争论境况下,将在周一和每月15号执行,但假使某月的15号还假设礼拜四,则该职分在此日实施几回。因而,应该尽力制止同时定义周和日的天职。

(8).命令段(即第五段)中,无法随随便便出现百分号”%”,因为它意味着换行的奇异意义,且第二个%后的有所字符串将用作命令的正统输入。

譬如说下边包车型客车定义:

* * * * * /bin/cat >>/tmp/crond.txt %"the first %%cron entry%"

该任务输出的结果将是:

"the first

cron entry
"

就此,在定时职分条目中若以时间概念文件名时,应当将%使用反斜杠转义。如:

* * * * * cp /etc/fstab /tmp/`date +\%Y-\%m-\%d`.txt

除此以外三个急需留意的光阴段设置是,使用*号导致低级其余大运覆盖高级其他小运。例如”*
*/2 * *
*”,它不意味每两钟头实施二遍职责,而是每分钟实施三回,即便在小时位上安装了每隔两钟头,但在分钟位上设置的是每分钟,所以它如故表示每分钟实施3遍任务。同理,”*/5
*/2 * *
*”分钟位上的装置覆盖时辰位上的装置,表示每4分钟实施一遍而忽视小时位的安装;”00
*/2 */5 * *”表示每隔两小时的整点执行1次职分而忽视天数位的装置。

正文目录:

12.3 crond命令的调节和测试

有的是时候写了定时职责却发现并未实施,大概进行破产,但因为crond是后台运营的,有没有别的提醒,很难展开排错。可是足以让crond运维在前端并展开调剂的。

先证实下任务安顿程序crond的暗许执行措施。

运用上面三条命令运维的crond都以在后台运转的,且都不借助于极端。

[root@xuexi ~]# systemctl start crond.service
[root@xuexi ~]# service crond start
[root@xuexi ~]# crond

但crond是允许接受选项的。

crond [-n] [-P] [-x flags]
选项说明:
-n:让crond以前端方式运行,即不依赖于终端。
-P:不重设环境变量PATH,而是从父进程中继承。
-x:设置调试项,flags是调试方式,比较有用的方式是test和sch,即"-x test"和"-x sch"。
  :其中test调试将不会真正的执行,sch调试将可以看到等待时间。具体的见下面的示例。

先看看运行脚本运行crond的章程。

[root@server2 ~]# cat /lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target

它的条件安排文件为/etc/sysconfig/crond,该文件中如何也没安装。

[root@server2 ~]# cat /etc/sysconfig/crond
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS=

具有它的运行命令为:/usr/sbin/crond
-n。但即便此处加了”-n”选项,crond也不会前端运行,且不会借助于极端,那是systemctl决定的。

再解释下怎么样进展调节。以上边包车型地铁任务条目为例。

[root@server2 ~]# crontab -e
* * * * * echo "hello world" >>/tmp/hello.txt

执行crond并带上调节和测试选项test。

[root@server2 ~]# crond -x test
debug flags enabled: test
[4903] cron started
log_it: (CRON 4903) INFO (RANDOM_DELAY will be scaled with factor 8% if used.)
log_it: (CRON 4903) INFO (running with inotify support)
log_it: (CRON 4903) INFO (@reboot jobs will be run at computer's startup.)
log_it: (root 4905) CMD (echo "hello world" >>/tmp/hello.txt )

实施crond并带上调节和测试选项sch。

[root@server2 ~]# crond -x sch
debug flags enabled: sch
[4829] cron started
log_it: (CRON 4829) INFO (RANDOM_DELAY will be scaled with factor 73% if used.)
log_it: (CRON 4829) INFO (running with inotify support)
[4829] GMToff=28800
log_it: (CRON 4829) INFO (@reboot jobs will be run at computer's startup.)
[4829] Target time=1497950880, sec-to-wait=38      # 等待crond daemon下一次的检测,所以表示38秒后crond将检测crontab file
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4829] Target time=1497950940, sec-to-wait=60
Minute-ly job. Recording time 1497922081
log_it: (root 4831) CMD (echo "hello world" >>/tmp/hello.txt )
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4829] Target time=1497951000, sec-to-wait=60
Minute-ly job. Recording time 1497922141
log_it: (root 4833) CMD (echo "hello world" >>/tmp/hello.txt )

但要注意,在sch调节和测试结果中的等待时间是crond那几个daemon的检查和测试时间,所以它意味着等待下叁遍检查和测试的年月,因而除了第3遍,之后每一趟都以60秒,因为暗中认可crond是每分钟检测贰次crontab
file的。例如,下边是某次的等候结果,在那四遍等待检查和测试进度中从未实施此外职分。

[4937] Target time=1497951720, sec-to-wait=18
[4937] Target time=1497951780, sec-to-wait=60
[4937] Target time=1497951840, sec-to-wait=60

还足以同时带几个调剂格局,如:

[root@server2 ~]# crond -x test,sch
debug flags enabled: sch test
[4914] cron started
log_it: (CRON 4914) INFO (RANDOM_DELAY will be scaled with factor 21% if used.)
log_it: (CRON 4914) INFO (running with inotify support)
[4914] GMToff=28800
log_it: (CRON 4914) INFO (@reboot jobs will be run at computer's startup.)
[4914] Target time=1497951540, sec-to-wait=9
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4914] Target time=1497951600, sec-to-wait=60
Minute-ly job. Recording time 1497922741
log_it: (root 4916) CMD (echo "hello world" >>/tmp/hello.txt )

那样在调节定时职责时间时,也不会真的执行命令。

12.2 crondtab file

crondtab file为天职定义文件。

(1).在此文件中,空行会被忽视,第多个非空白字符且以#始发的表现注释行,但#无法冒出在行中。

(2).能够在crontab
file中安装环境变量,格局为”name=value”,等号两边的空格可轻易,即”name =
value”也是允许的。但value中出现的空格必须选拔引号包围。

(3). 私下认可crond命令运行的时候会开首化全数变量,除了某多少个变量会被crond
daemon自动安装好,别的兼具变量都被设置为空值。自动安装的变量包罗SHELL=/bin/sh,以及HOME和LOGNAME(在CentOS上则号称USEWrangler),后双边将被默许设置为/etc/passwd中钦命的值。在那之中SHELL和HOME能够被crontab
file中自定义的变量覆盖,但LOGNAME不允许覆盖。当然,自行定义的变量也会被加载到内存。

(4).除了LOGNAME/HOME/SHELL变量之外,假若设置了发送邮件,则crond还会招来MAILTO变量。假设设置了MAILTO,则邮件将发送给此变量钦点的地点,借使MAILTO定义的值为空(MAILTO=””),将不发送邮件,其余全体意况邮件都会发送给crontab
file的全数者。

(5).在系统定时职分文件/etc/crontab中,暗中同意已定义PATH环境变量和SHELL环境变量,在那之中PATH=/sbin:/bin:/usr/sbin:/usr/bin。

(6).crond daemon每分钟检测一次crontab file看是不是有任务布署条目必要实施。

12.1
配置定时职务

12.4 精确到秒的任务布署

默许情状下,crond执行的职分只可以精确到分钟,不能精确到秒。但通过技术,也是能达成秒级职务的。

(1).方法一:不太可信赖的措施

写1个剧本,在剧本中sleep3分钟的时间,那样能促成每3秒执行二次命令。

[root@xuexi ~]# cat /tmp/a.sh
#!/bin/bash
#
PATH="$PATH:/usr/local/bin:/usr/local/sbin"
for ((i=1;i<=20;i++));do
ls /tmp
sleep 3
done

[root@xuexi ~]# cat /var/spool/cron/lisi
* * * * * /bin/bash /tmp/a.sh

不过这么的主意不是拔尖形式,因为执行命令也急需时日,且crond暗中认可会有三个随机延时,随机延时由变量RANDOM_DELAY定义。

(2).方法二:在cron配置文件中写入多条sleep命令和任何命令。

[root@xuexi ~]# cat /var/spool/cron/lisi
* * * * * ls /tmp
* * * * * sleep 3 && ls /tmp
* * * * * sleep 6 && ls /tmp
* * * * * sleep 9 && ls /tmp
* * * * * sleep 12 && ls /tmp
* * * * * sleep 15 && ls /tmp
* * * * * sleep 18 && ls /tmp
* * * * * sleep 21 && ls /tmp
* * * * * sleep 24 && ls /tmp
* * * * * sleep 27 && ls /tmp
* * * * * sleep 30 && ls /tmp
…
* * * * * sleep 57 && ls /tmp

那种措施很麻烦,不过更准确。假使定义到每秒级别就得写60行cron记录。

通过能见到,秒级的任务本就不是crond所擅长的。实际上能用到秒级的天职也相比较少。

12.3 crond命令的调剂

不少时候写了定时职分却发现没有实行,只怕实施破产,但因为crond是后台运转的,有没有其它提示,很难展开排错。但是足以让crond运营在前端并进行调节和测试的。

先表达下任务布置程序crond的默许执行办法。

接纳上面三条命令运转的crond都以在后台运转的,且都不依靠于极端。

[[email protected] ~]# systemctl start crond.service
[[email protected] ~]# service crond start
[[email protected] ~]# crond

但crond是同意接受选项的。

crond [-n] [-P] [-x flags]
选项说明:
-n:让crond以前端方式运行,即不依赖于终端。
-P:不重设环境变量PATH,而是从父进程中继承。
-x:设置调试项,flags是调试方式,比较有用的方式是test和sch,即"-x test"和"-x sch"。
  :其中test调试将不会真正的执行,sch调试将可以看到等待时间。具体的见下面的示例。

先看看运行脚本运维crond的格局。

[[email protected] ~]# cat /lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target

它的环境布置文件为/etc/sysconfig/crond,该文件中怎么样也没设置。

[[email protected] ~]# cat /etc/sysconfig/crond
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS=

具备它的起步命令为:/usr/sbin/crond
-n。但固然此处加了”-n”选项,crond也不会前端运维,且不会凭借于极端,那是systemctl决定的。

在诠释下如何进展调节。以上面包车型大巴职责条目为例。

[[email protected] ~]# crontab -e
* * * * * echo "hello world" >>/tmp/hello.txt

执行crond并带上调节和测试选项test。

[[email protected] ~]# crond -x test
debug flags enabled: test
[4903] cron started
log_it: (CRON 4903) INFO (RANDOM_DELAY will be scaled with factor 8% if used.)
log_it: (CRON 4903) INFO (running with inotify support)
log_it: (CRON 4903) INFO (@reboot jobs will be run at computer's startup.)
log_it: (root 4905) CMD (echo "hello world" >>/tmp/hello.txt )

实施crond并带上调节和测试选项sch。

[[email protected] ~]# crond -x sch
debug flags enabled: sch
[4829] cron started
log_it: (CRON 4829) INFO (RANDOM_DELAY will be scaled with factor 73% if used.)
log_it: (CRON 4829) INFO (running with inotify support)
[4829] GMToff=28800
log_it: (CRON 4829) INFO (@reboot jobs will be run at computer's startup.)
[4829] Target time=1497950880, sec-to-wait=38      # 等待crond daemon下一次的检测,所以表示38秒后crond将检测crontab file
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4829] Target time=1497950940, sec-to-wait=60
Minute-ly job. Recording time 1497922081
log_it: (root 4831) CMD (echo "hello world" >>/tmp/hello.txt )
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4829] Target time=1497951000, sec-to-wait=60
Minute-ly job. Recording time 1497922141
log_it: (root 4833) CMD (echo "hello world" >>/tmp/hello.txt )

但要注意,在sch调节和测试结果中的等待时间是crond那些daemon的检查和测试时间,所以它代表等待下一回检查和测试的时刻,因此除了第③回,之后每一遍都是60秒,因为暗中同意crond是每分钟检查和测试二次crontab
file的。例如,上边是某次的守候结果,在那四次等待检查和测试进程中从未执行此外任务。

[4937] Target time=1497951720, sec-to-wait=18
[4937] Target time=1497951780, sec-to-wait=60
[4937] Target time=1497951840, sec-to-wait=60

还是能而且带几个调剂方式,如:

[[email protected] ~]# crond -x test,sch
debug flags enabled: sch test
[4914] cron started
log_it: (CRON 4914) INFO (RANDOM_DELAY will be scaled with factor 21% if used.)
log_it: (CRON 4914) INFO (running with inotify support)
[4914] GMToff=28800
log_it: (CRON 4914) INFO (@reboot jobs will be run at computer's startup.)
[4914] Target time=1497951540, sec-to-wait=9
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4914] Target time=1497951600, sec-to-wait=60
Minute-ly job. Recording time 1497922741
log_it: (root 4916) CMD (echo "hello world" >>/tmp/hello.txt )

如此那般在调节和测试定时任务时间时,也不会真正执行命令。

12.2
crontab
file

12.4 精确到秒的职务布署

暗许情形下,crond执行的任务只好精确到分钟,不能够准确到秒。但经过技能,也是能兑现秒级职分的。

(1).方法一:不太准确的法子

写1个本子,在本子中sleep3分钟的光阴,那样能实现每3秒执行1次命令。

[[email protected] ~]# cat /tmp/a.sh
#!/bin/bash
#
PATH="$PATH:/usr/local/bin:/usr/local/sbin"
for ((i=1;i<=20;i++));do
ls /tmp
sleep 3
done

[[email protected] ~]# cat /var/spool/cron/lisi
* * * * * /bin/bash /tmp/a.sh

而是这样的不二法门不是一流方法,因为执行命令也急需时日,且crond暗中同意会有一个随意延时,随机延时由变量RANDOM_DELAY定义。

(2).方法二:在cron配置文件中写入多条sleep命令和别的命令。

[[email protected] ~]# cat /var/spool/cron/lisi
* * * * * ls /tmp
* * * * * sleep 3 && ls /tmp
* * * * * sleep 6 && ls /tmp
* * * * * sleep 9 && ls /tmp
* * * * * sleep 12 && ls /tmp
* * * * * sleep 15 && ls /tmp
* * * * * sleep 18 && ls /tmp
* * * * * sleep 21 && ls /tmp
* * * * * sleep 24 && ls /tmp
* * * * * sleep 27 && ls /tmp
* * * * * sleep 30 && ls /tmp
…
* * * * * sleep 57 && ls /tmp

那种方法很麻烦,不过更确切。要是定义到每秒级别就得写60行cron记录。

经过能看到,秒级的职分本就不是crond所擅长的。实际上能用到秒级的天职也正如少。

 

回去种类作品大纲:

12.3
crond命令的调节和测试

转发请表明出处:

定时职责,第二2章职责 本文目录: 12.1
配置定时职责 12.2 crontab file 12.3 crond命令的调剂 12.4
精确到秒的职务布置 12.1 配置定时职务 首…

12.4
精确到秒的天职业安全健康排


12.1 配置定时义务

率先需弄清的定义:

(1).crond是一个daemon类程序,路径为/usr/sbin/crond。私下认可会未来台措施运转,service或systemd格局运维crond暗中同意也是后台方式的。

(2).crondtab是管制crontab file的工具,而crontab
file是概念定时任务条指标公文。

(3).crontab
file存在于多处,包涵系统定时职分文件/etc/crontab和/etc/cron.d/*,还有独属于各用户的职务文件/var/spool/cron/USEEvoqueNAME。

再就是crontab命令:

-l:列出定时任务条目
-r:删除当前任务列表终端所有任务条目
-i:删除条目时提示是否真的要删除
-e:编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件
-u:操作指定用户的定时任务

施行crontab -e命令编辑当前用户的crontab
file,例如当前为root用户,则编辑的是/var/spool/cron/root文件。例如写入下边这一行。

* * * * * /bin/echo "the first cron entry"  >>/tmp/crond.txt

那将会每秒钟实施一回echo命令,将内容增添到/tmp/crond.txt文件中。

职分布置中的任务条目怎么样定义,能够查看/etc/crontab文件。

[root@server2 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

在此文件中定义了一个变量,当中三个是PATH,该变量极其主要。在终极还交到了职务条目标概念方式:

(1).各种任务条目分为6段,每段以空格分隔,之所以此处多了user-name段是因为/etc/crontab为系统定时任务文件,而一般定时职务是一向不应当段的。

(2).前五段为时间的设定段,分别代表”分时日月周”,它们的概念不能超越合理值范围,第五段为所要执行的通令或脚本职务段。

(3).在岁月概念段中,使用”*”表示每单位,即每秒钟,每小时,每一日,每月,每一周几(如故是每一天)。

(4).每一个日子段中,都足以使用逗号”,”来表示枚举,例如定义”0,30,50 * * *
*”表示每一个时间的整点、第壹8分钟和第六二十一分钟都施行该任务。

(5).各样时间段中,都可以应用”-“定义范围,能够组成逗号使用。如分钟段定义了”00,20-30,50″表示各样时间的整点、第③0到三十几分钟的每分钟、第④拾五分钟都推行该职分。

(6).每一个日子段中,使用”/”表示忽略时间,如在小时段定义了”0-13/2″表示在”0/百分之五十/6/4/5/12″点才满足时间概念。常动用”*/N”表示每隔多长期的意思。例如”00
*/2 * * *”表示在每天每隔两小时的整点执行该任务。

(7).要是定义的日和周争辨了,则会一再实行(不包蕴因为*号导致的争持)。例如每月的15号执行该职责,同时又定义了周日执行该职分,正常无争辩景况下,将在礼拜一和每月15号执行,但若是某月的15号还要是周五,则该职分在此日实践四次。因而,应该尽力幸免同时定义周和日的任务。

(8).命令段(即第⑤段)中,不能随随便便出现百分号”%”,因为它意味着换行的奇特含义,且第②个%后的拥有字符串将作为命令的科鲁班入。

诸如下边包车型地铁概念:

* * * * * /bin/cat >>/tmp/crond.txt %"the first %%cron entry%"

该任务输出的结果将是:

"the first

cron entry
"

故此,在定时职责条目中若以时间概念文件名时,应当将%使用反斜杠转义。如:

* * * * * cp /etc/fstab /tmp/`date +\%Y-\%m-\%d`.txt

其它一个供给注意的大运段设置是,使用*号导致低级别的小时覆盖高级别的小时。例如”*
*/2 * *
*”,它不意味每两小时实施1遍职责,而是每分钟实施3次,就算在小时位上安装了每隔两小时,但在分钟位上设置的是每分钟,所以它如故表示每分钟实施1次义务。同理,”*/5
*/2 * *
*”分钟位上的装置覆盖时辰位上的设置,表示每4分钟实施三回而忽视小时位的安装;”00
*/2 */5 *
*”表示每隔两钟头的整点执行2遍职分而忽视天数位的装置。

美高梅手机版4858 ,12.2 crondtab file

crondtab file为职务定义文件。

(1).在此文件中,空行会被忽视,第②个非空白字符且以#始发的行为注释行,但#不可能出现在行中。

(2).能够在crontab
file中安装环境变量,格局为”name=value”,等号两边的空格可任意,即”name =
value”也是允许的。但value中现身的空格必须接纳引号包围。

(3). 暗中认可crond命令运行的时候会起初化全部变量,除了某几个变量会被crond
daemon自动安装好,别的兼具变量都被设置为空值。自动安装的变量包罗SHELL=/bin/sh,以及HOME和LOGNAME(在CentOS上则号称USE陆风X8),后双边将被暗中认可设置为/etc/passwd中钦赐的值。当中SHELL和HOME能够被crontab
file中自定义的变量覆盖,但LOGNAME不允许覆盖。当然,自行定义的变量也会被加载到内部存款和储蓄器。

(4).除了LOGNAME/HOME/SHELL变量之外,若是设置了发送邮件,则crond还会寻找MAILTO变量。假使设置了MAILTO,则邮件将发送给此变量钦命的地点,如若MAILTO定义的值为空(MAILTO=””),将不发送邮件,其余兼具意况邮件都会发送给crontab
file的全数者。

(5).在系统定时任务文件/etc/crontab中,暗中认可已定义PATH环境变量和SHELL环境变量,在那之中PATH=/sbin:/bin:/usr/sbin:/usr/bin。

(6).crond daemon每分钟检查和测试三次crontab file看是还是不是有职责布署条目要求履行。

12.3 crond命令的调剂

更仆难数时候写了定时职务却发现并未进行,可能实施破产,但因为crond是后台运营的,有没有别的提醒,很难展开排错。可是可以让crond运维在前者并拓展调节和测试的。

先表明下职责布置程序crond的暗中同意执行办法。

行使上边三条命令运营的crond都以在后台运转的,且都不借助于于极端。

[root@xuexi ~]# systemctl start crond.service
[root@xuexi ~]# service crond start
[root@xuexi ~]# crond

但crond是同意接受选项的。

crond [-n] [-P] [-x flags]
选项说明:
-n:让crond以前端方式运行,即不依赖于终端。
-P:不重设环境变量PATH,而是从父进程中继承。
-x:设置调试项,flags是调试方式,比较有用的方式是test和sch,即"-x test"和"-x sch"。
  :其中test调试将不会真正的执行,sch调试将可以看到等待时间。具体的见下面的示例。

先看看运营脚本运转crond的主意。

[root@server2 ~]# cat /lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target

它的环境安顿文件为/etc/sysconfig/crond,该公文中什么也没设置。

[root@server2 ~]# cat /etc/sysconfig/crond
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS=

装有它的启航命令为:/usr/sbin/crond
-n。但固然那里加了”-n”选项,crond也不会前端运营,且不会凭借于极端,那是systemctl决定的。

在演说下怎么实行调节。以下边包车型大巴天职条目为例。

[root@server2 ~]# crontab -e
* * * * * echo "hello world" >>/tmp/hello.txt

施行crond并带上调节和测试选项test。

[root@server2 ~]# crond -x test
debug flags enabled: test
[4903] cron started
log_it: (CRON 4903) INFO (RANDOM_DELAY will be scaled with factor 8% if used.)
log_it: (CRON 4903) INFO (running with inotify support)
log_it: (CRON 4903) INFO (@reboot jobs will be run at computer's startup.)
log_it: (root 4905) CMD (echo "hello world" >>/tmp/hello.txt )

实践crond并带上调节和测试选项sch。

[root@server2 ~]# crond -x sch
debug flags enabled: sch
[4829] cron started
log_it: (CRON 4829) INFO (RANDOM_DELAY will be scaled with factor 73% if used.)
log_it: (CRON 4829) INFO (running with inotify support)
[4829] GMToff=28800
log_it: (CRON 4829) INFO (@reboot jobs will be run at computer's startup.)
[4829] Target time=1497950880, sec-to-wait=38      # 等待crond daemon下一次的检测,所以表示38秒后crond将检测crontab file
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4829] Target time=1497950940, sec-to-wait=60
Minute-ly job. Recording time 1497922081
log_it: (root 4831) CMD (echo "hello world" >>/tmp/hello.txt )
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4829] Target time=1497951000, sec-to-wait=60
Minute-ly job. Recording time 1497922141
log_it: (root 4833) CMD (echo "hello world" >>/tmp/hello.txt )

但要注意,在sch调节和测试结果中的等待时间是crond这几个daemon的检查和测试时间,所以它表示等待下2次检查和测试的大运,由此除了第②回,之后每一趟都是60秒,因为暗中同意crond是每分钟检查和测试三遍crontab
file的。例如,下边是某次的等待结果,在这次等待检查和测试进度中尚无履行别的职分。

[4937] Target time=1497951720, sec-to-wait=18
[4937] Target time=1497951780, sec-to-wait=60
[4937] Target time=1497951840, sec-to-wait=60

还是能够而且带多少个调剂格局,如:

[root@server2 ~]# crond -x test,sch
debug flags enabled: sch test
[4914] cron started
log_it: (CRON 4914) INFO (RANDOM_DELAY will be scaled with factor 21% if used.)
log_it: (CRON 4914) INFO (running with inotify support)
[4914] GMToff=28800
log_it: (CRON 4914) INFO (@reboot jobs will be run at computer's startup.)
[4914] Target time=1497951540, sec-to-wait=9
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4914] Target time=1497951600, sec-to-wait=60
Minute-ly job. Recording time 1497922741
log_it: (root 4916) CMD (echo "hello world" >>/tmp/hello.txt )

那般在调试定时职分时间时,也不会真正执行命令。

12.4 精确到秒的职务布置

暗中认可景况下,crond执行的职责只好精确到分钟,不能够准确到秒。但由此技能,也是能促成秒级职责的。

(1).方法一:不太规范的措施

写2个本子,在本子中sleep3分钟的小时,那样能落到实处每3秒执行一遍命令。

[root@xuexi ~]# cat /tmp/a.sh
#!/bin/bash
#
PATH="$PATH:/usr/local/bin:/usr/local/sbin"
for ((i=1;i<=20;i++));do
ls /tmp
sleep 3
done

[root@xuexi ~]# cat /var/spool/cron/lisi
* * * * * /bin/bash /tmp/a.sh

只是那样的点子不是最棒艺术,因为执行命令也亟需时刻,且crond私下认可会有1个随机延时,随机延时由变量RANDOM_DELAY定义。

(2).方法二:在cron配置文件中写入多条sleep命令和任何命令。

[root@xuexi ~]# cat /var/spool/cron/lisi
* * * * * ls /tmp
* * * * * sleep 3 && ls /tmp
* * * * * sleep 6 && ls /tmp
* * * * * sleep 9 && ls /tmp
* * * * * sleep 12 && ls /tmp
* * * * * sleep 15 && ls /tmp
* * * * * sleep 18 && ls /tmp
* * * * * sleep 21 && ls /tmp
* * * * * sleep 24 && ls /tmp
* * * * * sleep 27 && ls /tmp
* * * * * sleep 30 && ls /tmp
…
* * * * * sleep 57 && ls /tmp

那种措施很麻烦,不过更标准。固然定义到每秒级别就得写60行cron记录。

因而能见到,秒级的职责本就不是crond所擅长的。实际上能用到秒级的职分也正如少。

 

再次回到连串小说大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

转发请注脚出处:http://www.cnblogs.com/f-ck-need-u/p/7059418.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有