crond——Linux下的计划任务学习笔记

时间:2021-06-06 08:09:46

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为主