Linux讲解之定时任务


本文摘自PHP中文网,作者巴扎黑,侵删。


本文目录:

12.1 配置定时任务

12.2 crontab file

12.3 crond命令的调试

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/USERNAME。

再就是crontab命令:

1

2

3

4

5

-l:列出定时任务条目

-r:删除当前任务列表终端所有任务条目

-i:删除条目时提示是否真的要删除

-e:编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件

-u:操作指定用户的定时任务

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

1

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

这将会每分钟执行一次echo命令,将内容追加到/tmp/crond.txt文件中。

任务计划中的任务条目如何定义,可以查看/etc/crontab文件。

1

2

3

4

5

6

7

8

9

10

11

12

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

SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=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 * * * *"表示每个时辰的整点、第30分钟和第50分钟都执行该任务。

(5).每个时间段中,都可以使用"-"定义范围,可以结合逗号使用。如分钟段定义了"00,20-30,50"表示每个时辰的整点、第20到30分钟的每分钟、第50分钟都执行该任务。

(6).每个时间段中,使用"/"表示忽略时间,如在小时段定义了"0-13/2"表示在"0/2/4/6/8/10/12"点才满足时间定义。常使用"*/N"表示每隔多久的意思。例如"00 */2 * * *"表示在每天每隔两小时的整点执行该任务。

(7).如果定义的日和周冲突了,则会多次执行(不包括因为*号导致的冲突)。例如每月的15号执行该任务,同时又定义了周三执行该任务,正常无冲突情况下,将在周三和每月15号执行,但如果某月的15号同时是周三,则该任务在此日执行两次。因此,应该尽力避免同时定义周和日的任务。

(8).命令段(即第6段)中,不能随意出现百分号"%",因为它表示换行的特殊意义,且第一个%后的所有字符串将当作命令的标准输入。

例如下面的定义:

1

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

该任务输出的结果将是:

1

"the firstcron entry"

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

1

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

另外一个需要注意的时间段设置是,使用*号导致低级别的时间覆盖高级别的时间。例如"* */2 * * *",它不表示每两小时执行一次任务,而是每分钟执行一次,尽管在小时位上设置了每隔两小时,但在分钟位上设置的是每分钟,所以它仍然表示每分钟执行一次任务。同理,"*/5 */2 * * *"分钟位上的设置覆盖小时位上的设置,表示每5分钟执行一次而忽略小时位的设置;"00 */2 */5 * *"表示每隔两小时的整点执行一次任务而忽略天数位的设置。

阅读剩余部分

相关阅读 >>

rsync定期更新配置方法

linux讲解之定时任务

linux讲解之定时任务

rsync定期更新配置方法

更多相关阅读请进入《12章》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...