最近有个客户发来邮件说crontab有错误日志,查看了一下,是因为系统上装了syslog-ng导致crontab没有权限写相关的日志。crontab在工作中经常用到,但是还不是十分的了解,今晚有空,翻开鸟哥的书在看看
用户想要建立例行性命令时,使用crontab命令。不过为了安全,可以限制使用crontab的用户账号,使用的限制数据有:
/etc/cron.allow:记录允许使用crontab的账号
/etc/cron.deny:记录不允许使用crontab的账号
/etc/cron.allow要比/etc/cron.deny优先,在判断上,这两个文件只选择一个来限制而已,因此建议只保留一个即可,系统默认值保留/etc/cron.deny,一行一个账号
crontab的工作会被记录到/var/spool/cron/这个目录中,而起是以账号来识别的,例如root使用crontab后被记录到/var/spool/cron/root这个文件中。另外/var/log/cron会记录每个用户执行cron的记录
crontab的语法:
-u:只有root才能执行这个任务,即帮助其他用户建立/删除crontab;
-e:编辑crontab的工作内容
-l:查看crontab的工作内容
-r:删除所有crontab的工作内容
[root@foxflypro ~]#crontab -e
0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
分 时 日 月 周
代表含义 | 分钟 | 小时 | 日期 | 月份 | 周 |
数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
当周围0或7时,都表示星期天,另外还有一些辅助的字符,如:
*:表示任何时间都接受
,:表示分割时段的意思,如:0 3,6 * * * command
-:表示一段时间范围,如8点到12点:20 8-12 * * * command
/n:表示每隔n单位时间,如:*/5 * * * * command
下面来介绍一下/etc/crontab这个文件
[root@foxflypro ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
MAILTO=root:表示当发生错误或标准输出时会将消息或屏幕显示的消息传递给谁。PATH=/sbin:/bin:/usr/sbin:/usr/bin 表示搜索路径,不需要多说了吧。# run-parts后面的目录中有个root表示系统会以root身份执行后面目录下所有可执行的文件,所以可以将每天需要执行的命令直接写到/etc/cron.daily中,并不需要crontab -e
如果有很多crontab都是每个5分钟执行一次,可以想到在某个时间段,系统会变得非常繁忙,所以这个时候就需要分别设置,可以这样做:
[root@foxflypro ~]# vim /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD1
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD1
4,9,14,19,24,29,34,39,44,49,55,59 * * * * root CMD1