1二.1 配置定时职责

率先需弄清的概念:

(一).crond是三个daemon类程序,路径为/usr/sbin/crond。私下认可会今后台措施运营,service或systemd方式运行crond私下认可也是后台方式的。

(二).crondtab是治本crontab file的工具,而crontab
file是概念定时任务条目标文本。

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

再就是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

在此文件中定义了三个变量,当中2个是PATH,该变量极其首要。在最后还提交了职分条目标概念情势:

(一).各样任务条目分为陆段,每段以空格分隔,之所以此处多了user-name段是因为/etc/crontab为系统定时职务文件,而貌似定时义务是未曾该段的。

(二).前5段为时间的设定段,分别表示”分时日月周”,它们的概念不可能超出合理值范围,第陆段为所要执行的一声令下或脚本职责段。

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

(肆).种种时刻段中,都得以选取逗号”,”来表示枚举,例如定义”0,30,50 * * *
*”表示每一个日子的整点、第三十6分钟和第5十多分钟都进行该职务。

(5).各类日子段中,都足以行使”-“定义范围,能够整合逗号使用。如秒钟段定义了”00,20-30,50″表示各样日子的整点、第二0到2拾5分钟的每分钟、第肆拾陆分钟都执行该职责。

(6).各类时刻段中,使用”/”表示忽略时间,如在小时段定义了”0-13/二”表示在”0/五成/6/8/10/1二”点才满意时间概念。常采纳”*/N”表示每隔多短期的情趣。例如”00
*/2 * * *”表示在天天每隔两时辰的整点执行该职分。

(柒).假设定义的日和周冲突了,则会反复履行(不包涵因为*号导致的争执)。例如每月的15号执行该职务,同时又定义了周一执行该职务,平常无顶牛情状下,将在礼拜3和每月壹5号执行,但倘使某月的15号还若是星期六,则该任务在此日履行五遍。由此,应该努力制止同时定义周和日的天职。

(八).命令段(即第陆段)中,无法随意出现百分号”%”,因为它意味着换行的优秀意义,且第一个%后的有所字符串将用作命令的正规化输入。

譬如说上边的概念:

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

该职分输出的结果将是:

"the first

cron entry
"

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

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

除此以外八个亟需留意的小时段设置是,使用*号导致低级别的时日覆盖高级别的时日。例如”*
*/2 * *
*”,它不意味每两钟头实施叁次职务,而是每分钟实施贰回,就算在小时位上安装了每隔两钟头,但在分钟位上设置的是每分钟,所以它依然表示每分钟实施1遍职分。同理,”*/5
*/2 * *
*”分钟位上的装置覆盖小时位上的设置,表示每6秒钟实施二回而忽视时辰位的安装;”00
*/2 */5 *
*”表示每隔两小时的整点执行一遍职务而忽略天数位的装置。

第一二章 定时职责,第3二章职责


正文目录:

1贰.壹 配置定时职务

12.2 crontab file

1二.3 crond命令的调剂

1二.四 精确到秒的义务安排



Linux crontab 命令详细用法及示例

Linux系统则是由 cron (crond) 这些系统服务来支配的。Linux
系统方面原本就有分外多的筹划工作,由此这几个系统服务是暗中认可运行的。此外,
由于使用者自身也得以安装安排任务,所以, Linux
系统也提供了使用者控制布置义务的命令 :crontab
命令[@[email protected]]

一、crond简介

crond是Linux下用来周期性的施行某种义务或等候处理有些事件的二个看护进度,与windows下的布置职分类似,当安装落成操作系统后,暗中同意会安装此服务工具,并且会自动运维crond进程,crond进程每秒钟会定期检查是不是有要实施的职分,假诺有要实践的职分,则自动执行该职务。

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

系统职务调度:系统周期性所要执行的行事,比如写缓存数据到硬盘、日志清理等。在/etc目录下有2个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,第1行PATH变量内定了系统执行命令的途径,第二行MAILTO变量钦命了crond的职务执行信息将透过电子邮件发送给root用户,假若MAILTO变量的值为空,则象征不发送职务履行新闻给用户,第四行的HOME变量钦点了在执行命令恐怕脚本时使用的主目录。第陆至九行表示的含义将在下个小节详细描述。那里不在多说。

用户职责调度:用户定期要进行的工作,比如用户数据备份、定时邮件提示等。用户能够采用crontab 工具来定制自身的安插义务。全体用户定义的crontab 文件都被保存在
/var/spool/cron目录中。其文件名与用户名相同。

使用者权限文件:

Linux配置定时职务详解,定时义务。文件:

/etc/cron.deny

说明:

该公文中所列用户不允许选择crontab命令

文件:

/etc/cron.allow

说明:

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

文件:

/var/spool/cron/

说明:

抱有用户crontab文件存放的目录,以用户名命名

crontab文件的含义:

用户所确立的crontab文件中,每壹行都意味着一项义务,每行的各种字段代表1项设置,它的格式共分为两个字段,前5段是光阴设定段,第六段是要举行的命令段,格式如下:

minute hour day month week command

其中:

minute: 表示分钟,能够是从0到5玖里边的任何整数。

hour:表示时辰,可以是从0到二叁以内的别的整数。

day:表示日期,能够是从一到第3第11中学学间的任何整数。

month:表示月份,能够是从一到12里头的别样整数。

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

command:要执行的命令,能够是系统命令,也得以是投机编排的台本文件。

澳门金沙国际 1

在上述各种字段中,还是可以使用以下特殊字符:

星号(*):代表享有不小大概的值,例如month字段要是是星号,则象征在满足别的字段的掣肘条件后每月都推行该命令操作。

逗号(,):能够用逗号隔断的值钦定二个列表范围,例如,“一,贰,五,七,8,玖”

中杠(-):能够用整数之间的中杠表示3个平头范围,例如“2-6”表示“2,3,四,5,陆”

正斜线(/):能够用正斜线钦点时间的间隔频率,例如“0-23/二”表示每两时辰实施三遍。同时正斜线能够和星号1起利用,例如*/十,假如用在minute字段,表示每十分钟实施2次。

二、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 ]

贰.命令功效:

通过crontab 命令,大家得以在确定地点的间隔时间执行钦命的系统指令或 shell
script脚本。时间间隔的单位能够是分钟、小时、日、月、周及以上的任意组合。那个命令卓殊设合周期性的日记分析或数据备份等工作。

3.发令参数:

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

file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。假诺在指令行中未有点名那些文件,crontab命令将接受专业输入(键盘)上键入的命令,并将它们载入crontab。

-e:编辑有个别用户的crontab文件内容。固然不点名用户,则表示编辑当前用户的crontab文件。

-l:呈现有些用户的crontab文件内容,若是不钦命用户,则表示展现当前用户的crontab文件内容。

-r:从/var/spool/cron目录中删除有些用户的crontab文件,假使不点名用户,则默许删除当前用户的crontab文件。

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

四.常用艺术:

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

澳门金沙国际 ,在思虑向cron进程提交叁个crontab文件以前,首先要做的壹件工作就是设置条件变量EDITOGL450。cron进度依照它来规定使用哪个编辑器编辑crontab文件。9
九 %的UNIX和Linux用户都选用vi,假如你也是如此,那么你就编写$
HOME目录下的. profile文件,在其中参预那样一行:

EDITOR=vi; export EDITOR

下一场保留并退出。不要紧创设一个名字为<user>
cron的文本,个中<user>是用户名,例如,
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

保存并脱离。确信前面陆个域用空格分隔。

在上头的例子中,系统将每隔1四分钟向决定台出口二回当前光阴。纵然系统崩溃或挂起,从最后所展现的年华就能够壹眼看出系统是什么样日子停止工作的。在有些系统中,用tty1来表示控制台,能够根据真实景况对地点的例证举行相应的修改。为了提交你碰巧创制的crontab文件,能够把这些新创造的文本作为cron命令的参数:

$ crontab davecron

今昔该文件已经付诸给cron进度,它将每隔一 四秒钟运营1遍。

再者,新创建文件的3个副本已经被放在/var/spool/cron目录中,文件名正是用户名(即dave)。

Linux中采纳crontab创制布置职务

Linux中用crontab例行工作安顿

Linux crontab不实施难点排查

Ubuntu使用crontab定时职分

Linux布置任务(at batch crontab anacron)  

本文永久更新链接地址:

crontab 命令详细用法及示例 Linux系统则是由
cron (crond) 那些体系服务来决定的。Linux
系统方面原本就有越多的陈设性工作,因而那一个系…

12.2 crondtab file

crondtab file为天职定义文件。

(一).在此文件中,空行会被忽视,第八个非空白字符且以#千帆竞发的一坐一起注释行,但#无法冒出在行中。

(二).能够在crontab
file中设置环境变量,方式为”name=value”,等号两边的空格可随意,即”name =
value”也是同意的。但value中出现的空格必须选拔引号包围。

(三). 暗中认可crond命令运营的时候会初叶化全体变量,除了某多少个变量会被crond
daemon自动安装好,别的全部变量都被装置为空值。自动安装的变量包含SHELL=/bin/sh,以及HOME和LOGNAME(在CentOS上则称之为USEENCORE),后双方将被暗中认可设置为/etc/passwd中钦命的值。个中SHELL和HOME能够被crontab
file中自定义的变量覆盖,但LOGNAME不相同意覆盖。当然,自行定义的变量也会被加载到内部存款和储蓄器。

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

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

(6).crond daemon每秒钟检测一次crontab file看是或不是有职务布置条目要求实施。

1贰.一 配置定时职责

先是需弄清的概念:

(一).crond是一个daemon类程序,路径为/usr/sbin/crond。私下认可会以往台措施运营,service或systemd格局运营crond私下认可也是后台格局的。

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

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

再就是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

那将会每分钟实施2遍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

在此文件中定义了一个变量,当中三个是PATH,该变量极其主要。在结尾还提交了任务条指标定义格局:

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

(二).前伍段为时间的设定段,分别表示”分时日月周”,它们的概念不可能压倒合理值范围,第伍段为所要执行的吩咐或脚本职分段。

(三).在时刻概念段中,使用”*”表示每单位,即每分钟,每时辰,每一天,每月,每一周几(依旧是每天)。

(四).每一个时间段中,都可以行使逗号”,”来表示枚举,例如定义”0,30,50 * * *
*”表示各样时刻的整点、第1十9分钟和第六十玖分钟都履行该任务。

(5).每一种时刻段中,都得以选择”-“定义范围,能够组合逗号使用。如分钟段定义了”00,20-30,50″表示各类时刻的整点、第拾到三十八分钟的每分钟、第陆十九分钟都实施该职分。

(陆).每一种时间段中,使用”/”表示忽略时间,如在小时段定义了”0-13/贰”表示在”0/八分之四/6/五分四/1二”点才满意时间概念。常利用”*/N”表示每隔多长期的意趣。例如”00
*/2 * * *”表示在每日每隔两小时的整点执行该职务。

(7).假使定义的日和周争执了,则会一再执行(不包含因为*号导致的争论)。例如每月的一五号实施该职分,同时又定义了礼拜陆执行该任务,不荒谬无争执情形下,将在周六和每月1五号执行,但万一某月的一5号还假如礼拜二,则该职责在此日进行三遍。由此,应该大力制止同时定义周和日的职责。

(捌).命令段(即第四段)中,不能够随便出现百分号”%”,因为它象征换行的特有含义,且第一个%后的装有字符串将作为命令的专业输入。

例如上边包车型的士概念:

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

该任务输出的结果将是:

"the first

cron entry
"

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

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

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

正文目录:

1贰.三 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的检查实验时间,所以它意味着等待下一遍检验的时间,由此除了第一遍,之后每一遍都以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为天职定义文件。

(一).在此文件中,空行会被忽略,第7个非空白字符且以#千帆竞发的作为注释行,但#不能够冒出在行中。

(二).能够在crontab
file中设置环境变量,方式为”name=value”,等号两边的空格可任意,即”name =
value”也是允许的。但value中出现的空格必须选用引号包围。

(三). 暗中认可crond命令运营的时候会开始化全部变量,除了某多少个变量会被crond
daemon自动安装好,别的全部变量都被安装为空值。自动安装的变量包罗SHELL=/bin/sh,以及HOME和LOGNAME(在CentOS上则名称叫USE奥德赛),后双方将被默许设置为/etc/passwd中钦赐的值。当中SHELL和HOME能够被crontab
file中自定义的变量覆盖,但LOGNAME不容许覆盖。当然,自行定义的变量也会被加载到内部存款和储蓄器。

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

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

(六).crond daemon每分钟质量评定3次crontab file看是还是不是有职务安顿条目须求进行。

1二.一配置定时职责

1②.四 精确到秒的职分安顿

暗中认可意况下,crond执行的天职只可以精确到分钟,无法准确到秒。但经过技能,也是能落到实处秒级职务的。

(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私下认可会有1个随便延时,随机延时由变量RANDOM_DELAY定义。

(2).方法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.三 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的质量评定时间,所以它象征等待下贰遍检查实验的时间,由此除了第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

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

[[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

1二.四 精确到秒的职责布置

暗许处境下,crond执行的职务只可以精确到分钟,无法精确到秒。但通过技术,也是能落成秒级职务的。

(一).方法一:不太可相信的情势

写三个剧本,在剧本中sleep3分钟的时日,那样能促成每3秒执行三遍命令。

[[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定义。

(二).方法二:在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所擅长的。实际上能用到秒级的天职也相比较少。

 

重返连串作品大纲:

1二.三crond命令的调节和测试

转发请注脚出处:

定时任务,第一二章职分 本文目录: 1二.1配置定时职务 1二.贰 crontab file 1二.三 crond命令的调剂 12.四精确到秒的职责安插 1贰.1 配置定时任务 首…

1二.四精确到秒的任务安排


1贰.壹 配置定时任务

首先需弄清的定义:

(一).crond是2个daemon类程序,路径为/usr/sbin/crond。默许会以往台措施运行,service或systemd方式运营crond暗许也是后台格局的。

(二).crondtab是管理crontab file的工具,而crontab
file是概念定时任务条目标文书。

(三).crontab
file存在于多处,包罗系统定时任务文件/etc/crontab和/etc/cron.d/*,还有独属于各用户的天职文件/var/spool/cron/USE兰德酷路泽NAME。

再就是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

那将会每分钟实施2次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

在此文件中定义了二个变量,个中1个是PATH,该变量极其主要。在结尾还提交了任务条目标概念方式:

(一).每一个职责条目分为⑥段,每段以空格分隔,之所以此处多了user-name段是因为/etc/crontab为系统定时职责文件,而貌似定时职分是从未该段的。

(二).前5段为时间的设定段,分别表示”分时日月周”,它们的概念不能够超出合理值范围,第陆段为所要执行的吩咐或脚本任务段。

(三).在时刻概念段中,使用”*”表示每单位,即每分钟,每小时,每一天,每月,周周几(照旧是天天)。

(肆).每种时间段中,都得以行使逗号”,”来表示枚举,例如定义”0,30,50 * * *
*”表示各样日子的整点、第3十6分钟和第四2十一分钟都进行该职分。

(5).每一个时刻段中,都足以采用”-“定义范围,能够组成逗号使用。如分钟段定义了”00,20-30,50″表示每一个时刻的整点、第20到28分钟的每分钟、第陆拾七分钟都履行该职责。

(陆).每种时刻段中,使用”/”表示忽略时间,如在小时段定义了”0-13/二”表示在”0/五成/6/8/十/12″点才满足时间概念。常动用”*/N”表示每隔多长期的情致。例如”00
*/2 * * *”表示在每日每隔两钟头的整点执行该职务。

(七).如若定义的日和周抵触了,则会频仍推行(不包涵因为*号导致的冲突)。例如每月的一五号实施该职务,同时又定义了礼拜伍执行该义务,正常无争论景况下,将在周六和每月壹五号实施,但要是某月的15号同时是周三,则该职责在此日实行几回。由此,应该努力防止同时定义周和日的职分。

(八).命令段(即第陆段)中,不可能随随便便出现百分号”%”,因为它表示换行的特别意义,且第三个%后的保有字符串将用作命令的正经输入。

诸如下边包车型客车定义:

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

该职务输出的结果将是:

"the first

cron entry
"

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

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

其余3个必要注意的日子段设置是,使用*号导致低级别的时光覆盖高级其他年华。例如”*
*/2 * *
*”,它不意味每两时辰实施一遍职分,而是每分钟实施贰遍,就算在小时位上安装了每隔两小时,但在分钟位上设置的是每秒钟,所以它依然表示每分钟实施三回职分。同理,”*/5
*/2 * *
*”分钟位上的设置覆盖小时位上的设置,表示每4分钟实施1次而忽视小时位的安装;”00
*/2 */5 *
*”表示每隔两时辰的整点执行二遍任务而忽视天数位的设置。

12.2 crondtab file

crondtab file为天职定义文件。

(一).在此文件中,空行会被忽视,第三个非空白字符且以#开始的行为注释行,但#无法出现在行中。

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

(三). 暗中同意crond命令运维的时候会起先化全部变量,除了某多少个变量会被crond
daemon自动安装好,其余兼具变量都被安装为空值。自动安装的变量包蕴SHELL=/bin/sh,以及HOME和LOGNAME(在CentOS上则号称USEHighlander),后两者将被默许设置为/etc/passwd中钦赐的值。个中SHELL和HOME能够被crontab
file中自定义的变量覆盖,但LOGNAME不容许覆盖。当然,自行定义的变量也会被加载到内存。

(四).除了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看是还是不是有职责安插条目需求执行。

1二.三 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 )

这么在调节和测试定时任务时间时,也不会真正执行命令。

1二.四 精确到秒的天职布署

暗中认可景况下,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暗中认可会有二个Infiniti制延时,随机延时由变量RANDOM_DELAY定义。

(2).方法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

相关文章