Linux定时任务Crontab命令

袁志蒙 次浏览

摘要:linux系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, ...

linux系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的crontab命令。

一.linux任务调度的工作主要分为以下两类:

1.系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

2.个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# 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

第一行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文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command

其中:

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

二.crontab命令选项:

    - u 指定一个用户,

    - l 列出某个用户的任务计划,

    - r 删除某个用户的任务,

    - e 编辑某个用户的任务

在末尾添加:*/1 * * * * date > /tmp/log.txt ,表示将日志输出到这个文件中

在末尾添加:*/1 * * * * date > /dev/null 2>&1 可以理解为现在标准输出直接输入到 /dev/null 中,而2>&1是将标准错误重定向到标准输出,所以当程序产生错误的时候,相当于错误流向左边,而左边依旧是输入到/dev/null中

三、cron文件语法:

分     小时      日       月       星期      命令

0-59   0-23   1-31  1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)

记住几个特殊符号的含义:

"*"代表取值范围内的数字,

"/"代表"每",

"-"代表从某个数字到某个数字,

","分开几个离散的数字

举几个简单例子:

5       *       *       *      *     ls              //指定每小时的第5分钟执行一次ls命令

30     5       *       *      *     ls              //指定每天的 5:30 执行ls命令

30     7       8       *      *      ls             //指定每月8号的7:30分执行ls命令

30     5       8       6      *      ls             //指定每年的6月8日5:30执行ls命令

30     6       *       *      0      ls             //指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]

30     3   10,20     *      *      ls             //每月10号及20号的3:30执行ls命令[注:”,”用来连接多个不连续的时段]

25     8-11  *        *     *      ls             //每天8-11点的第25分钟执行ls命令[注:”-”用来连接连续的时段]

*/15   *      *        *     *      ls            //每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

30     6    */10      *     *      ls            //每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]

50    7       *         *     *     root run-parts /etc/cron.daily   //每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件[ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

四、crontab在YZMPHP框架中的使用例子:

sudo crontab -e
* * * * * /usr/local/bin/php /data1/yzmcms/yzm task run > /dev/null 2>&1

上例子表示Linux每分钟执行一个YZMPHP的命令,更多YZMPHP使用方式见:www.yzmcms.com

随机新闻

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~