您的位置:首页 > 运维架构 > Linux

Linux定时任务Cron命令详解

2014-12-27 10:46 543 查看

1.cron服务

crond是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每天会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行。

linux任务调度的工作主要分为以下两类:系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存。个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

如果系统没有安装cron服务,在CentOS上可以通过如下命令安装:

[root@centos ~]# yum install -y vixie-cron
安装完后启动cron服务。

[root@centos ~]# service crond start
查看cron服务状态。

[root@centos ~]# service crond status
crond (pid  22472) is running...


2.crontab命令选项

-e : 编辑用户的crontab任务。用户如果设置了自己的cron,那会在/var/spool/cron目录下面有对应用户名的crontab文件。
-l : 列出用户的crontab的内容。
-r : 删除用户的crontab的内容。
-i : 删除用户的crontab任务前提示。
-u : 定某个用户的crontab任务,一般root用户在执行这个命令的时候需要此参数。

-s :selinux context

3.cron定时任务编写规则

我们可以先看一下/etc/crontab文件。该文件内容描述了一个cron任务的定义。

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


minute 每个小时的第几分钟执行该任务
hour 每天的第几个小时执行该任务
day of month 每月的第几天执行该任务
month 每年的第几个月执行该任务
day of week 每周的第几天执行该任务
command 指定要执行的程序

与这些参数一起使用的还有几个特殊符号:

"*"代表取值范围内的数字,
"/"代表"每",
"-"代表从某个数字到某个数字,
","分开几个离散的数字

cron定时任务样例

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命令 
30 3 10,20 * * ls //每月10号及20号的3:30执行ls命令
25 8-11 * * * ls  //每天8-11点的第25分钟执行ls命令
*/15 * * * * ls   //每15分钟执行一次ls命令
30 6 */10 * * ls  //每个月中,每隔10天6:30执行一次ls命令


4.cron相关文件

所有用户定义的 crontab 都被保存在 /var/spool/cron目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab项目,登录为该用户,然后键入crontab -e命令,使用由 VIM 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和/etc/crontab相同。当对crontab所做的改变被保存后,该crontab文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username
中。

cron 守护进程每分钟都检查/etc/crontab文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个crontab文件改变后就不必重新启动守护进程了。

/etc/cron.allow 和 /etc/cron.deny文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。无论使用控制文件中的规定如何,根用户都总是可以使用 cron。

如果 cron.allow文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。

如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。

除了上面几个文件外,在/etc目录下还有好几个跟cron相关的目录,cron.daily,cron.hourly,cron.monthly, cron.weekly,这些目录下的脚本被相应地每日、每小时、每月和每周执行。这些目录中的文件应该是 shell 脚本。如果你想要增加一个任务到cron里,把运行任务的脚本(或者脚本的连接)放在对应的目录里。再结合run-parts这个参数把任务加入到crontab。

如要每天7:50执行/etc/cron.daily目录中的所有可执行文件,可以使用如下命令:



[root@centos ~]# crontab -e

50 7 * * * run-parts /etc/cron.daily


5. 执行结果

上文的所有的定时任务如果正常执行,我们只能看到执行结果。如果在执行过程中出现异常情况,没法分析原因,这时可以使用输出重定向,即在计划任务后加上 >>/var/log/crontab_log 2>&1,通过分析执行过程来寻找错误的原因。(2>&1:把错误重定向到输出要送到的地方)

50 7 * * * run-parts /etc/cron.daily >>/var/log/crontab_log 2>&1


参考:

用cron定时执行任务

cron命令 定时执行任务

Linux计划任务工具cron用法详解

linux中Cron定时任务系统命令详解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: