介绍
cron是一个守护程序(后台进程),其作用是定期执行指定的命令。
crontab是一个程序,其作用是用于修改和删除一个列表,该列表是用户配置的定时命令,并且每个用户都可以有自己的crontab列表。除了使用crontab程序外,还可以手动去修改/etc/cron.d/目录下的cron作业。
crontabs是配置定时作业的一套规则。除普通配置外,crontabs还可以配置/etc/sysconfig/run-parts文件的随机化,随机化可以简单的理解为随机执行命令。随机化通常会用在共享网络中,在共享网络中,如果配置多个cron作业,可能会影响到服务器网络流量。
原理
CentOS默认会启动cron服务,这个是怎么启动的,暂时没找到相关资料。
在cron服务启动后,会去搜索/var/spool/cron目录下的文件,然后跟/etc/passwd文件中的用户名去对比,如果一致,则将同名文件中的内容加载到内存中。除此之外,还会搜索/etc/crontab和/etc/cron.d目录下的文件。
cron服务在执行定时的任务后,会将输出信息通过邮件发送到crontab的拥有者,也就是/var/mail目录下的同用户名文件。
crontab在修改后,不需要手动重启cron服务,因为cron服务会在每分钟检查spool目录和/etc/crontab的modtime(文件修改时间),如果modtime发生过变化,cron服务就检查所有的crontab文件modtime,然后重新加载所有已改变的文件。
限制
crontab可以配置cron.allow和cron.deny文件来限制用户使用。cron.allow文件中配置哪些用户能够访问,而cron.deny刚好相反,配置哪些用户不能访问。配置有三种情况:
- 如果cron.allow文件存在,则必须在其文件中列出用户,该用户才能使用cron服务。
- 如果cron.allow文件不存在但cron.deny文件存在,则列在cron.deny文件中的用户就不能再使用cron服务。
- 如果这两个文件都没有,则仅超级用户root能够使用cron服务。
除此之外,还可以配置/etc/security/access.conf来控制使用cron服务的用户。
crontab语法
指令 |
描述 |
备注 |
-u |
指定修改crontab的用户名 |
|
-l |
列出当前用户的crontab |
|
-r |
移除当前用户的crontab |
|
-e |
编辑当前用户的crontab列表 |
使用的编辑器是由VISUAL或EDITOR环境变量指定 |
-i |
指定删除crontab时需二次确认 |
此选项需跟-r一起使用,输入Y/y确认删除 |
-s |
指定编辑之前是否将SELinux安全context字符串附加到crontab文件中 |
此选项需跟-e一起使用,会在编辑中默认添加SELinux上下文 |
-c |
跟集群有关,待学习 |
此选项需跟-c一起使用 |
-n |
跟集群有关,待学习 |
此选项需跟-c一起使用 |
crontabs规则
建议在配置crontabs规则时,将脚本的结果重定向到/dev/null中。这样做的好处就是避免随时间的增加,脚本执行次数过多,导致/var/spool/mail中的文件变得很大。 &> /dev/null
# .---------------- 第一个*代表分钟(0 - 59),每小时的X分执行
# | .------------- 第二个*代表小时 (0 - 23),每天的第X小时执行
# | | .---------- 第三个*代表天数 (1 - 31),每月的第X天执行
# | | | .------- 第四个*代表月份 (1 - 12),每年的第X月执行
# | | | | .---- 第五个*代表星期 (0 - 6),每周的星期X执行,0代表星期日
# | | | | |
# * * * * * user-name command to be executed
示例
说了这么多,不如实际使用一下。
我这里有个文件test.sh,里面就是简单的打印一句“执行成功”。接下来配置每分钟执行一次。
配置crontabs
[root@localhost ~]# crontab -e
* * * * * /root/test.sh
等待中。。。。。。
经过一分钟的等待后,再次回车刷新控制台就能看到新邮件了。
查看邮件文件,就能看到执行情况。