linux在安装系统过程中会安装crond这么一个服务工具,并随系统启动而启动,成为守护进程daemon,即后台服务,目的就是定期检查是否存在需要周期性执行的任务。
相关的配置文件有/etc/crontab,以及/var/spool/cron/目录下以用户名命名的各个用户的crontab配置文件。而/etc/crontab文件负责系统任务调度,即全局计划任务,/etc/crontab文件内容如下(以Centos 6.0为例):
[root@localhost ~]# vi /etc/crontab
SHELL=/bin/bash #指定执行所用到的shell终端
PATH=/sbin:/bin:/usr/sbin:/usr/bin #指定环境变量,以便执行某条命令的时候可不使用绝对路径
MAILTO=root #指定执行返回结果发送到指定用户的邮箱目录中,默认为/var/spool/mail/xxx,此处xxx为root,指代root的邮箱目录
HOME=/ #指定执行命令或脚本时使用的主目录
# For details see man 4 crontabs
# Example of job definition: #此处为crond计划任务填写格式说明
# .---------------- 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
# | | | | |
# * * * * * command to be executed
*/10 * * * * echo "hello world" >> /usr/local/test/test2 #此行意义为在每天,每月,每小时,每隔10分钟都执行一次echo "hello world"并把结果输到/usr/local/test/test2
文件中,属自定义系统计划任务。
*号可以有多种定义方式,比如1-2表示从第1到第2分钟等等;1,2,3,4表示同时在多个时间段执行;*/2表示每2个单位时间执行一次。此类定义均可以复合使用,如23-7/1表示从23到7的时间段内,每个1个时间单位执行某个操作。
一般情况下不建议直接在此文件改动,而是在/etc/cron.d目录下放置相应的任务脚本,crond执行时,读取三个地方的配置文件/etc/crontab,和/etc/cron.d,以及每个用户相应的配置文件,可用crontab -u [user] -l 查看,相应地还有/etc目录下对应每个按时间执行的脚本目录,即/etc/cron.hourly,/etc/cron.daily,/etc/weekly,/etc/cron.monthly分别对应每小时,每天,每周,每个月运行一次对应目录下的脚本,相应地,该规则应该这样写(星号从左往右依次代表分,时,天,月,星期):
* * * * * run-parts /etc/cron.hourly
* * * * * run-parts /etc/cron.daily
* * * * * run-parts /etc/cron.weekly
* * * * * run-parts /etc/cron.monthly
举个例子,
10 * 03 * * run-parts /etc/cron.hourly
意为每个月的3号那天每小时的第10分钟执行一遍/etc/cron.hourly目录下的脚本,相应的,由于使用的是cron.hourly目录,即每小时执行一次任务,所以对应的“小时”位不用设置,其余选项类推。run-parts选项后接目录的绝对路径,没有run-parts则后面跟的是脚本文件或者系统命令。
crond由于是系统服务项,所以相应的可以有如下的针对服务的操作命令:
service crond start|stop|restart|reload|status 分别对应crond服务的启动,停止,重启,重新加载配置文件和状态
而crond自身有如下命令选项
crontab -l #列出当前用户的crontab文件内容,即计划任务,若不使用-u [user]指定用户则默认显示当前用户,下同
crontab -e #编辑用户的crontab文件
crontab -r #删除用户位于/var/spool/cron/下的crontab文件,每个用户均有一个文件夹与其对应
crontab -i #在删除crontab文件时出现确认提示
crontab -u [user] #指定某个用户进行操作,当指定用户进行操作后,相应地在/var/spool/cron/目录下会出现对应用户名的crontab文件
另,位于/etc/cron.deny文件里的用户表示不允许使用crontab命令,同理有/etc/cron.allow表示允许使用,若/etc/目录下同时出现这两个文件则策略以allow为主