一:知识背景
crontab是用来定时执行脚本的进程,crond进程每分钟会定时检查是否有要执行的任务。操作系统会安装完成会默认安装工具并自动启动crond进程。
业务上主要用于:
1.系统周期性执行的清理缓冲,备份系统数据
2.个人用户进程的守护、定时清理日志
二:语法知识
crontab 【-u user】【-e| -r| -l】
【-u user】:就是指定用户的时程表,当然指定的前提是当前用户权限大于指定用户。这个可以直接省略,就是表示以当前用户创建、删除或列出时程表,
【-options】: -e 创建crontab文件,内定的文字编辑指定是vim,所以也是分为命令行模式和文本模式,按i进行编辑
-r 删除当前时程表,权限约束
-l 列出当前时程表,权限约束
crontab文件语法: crontab会进行语法检查,vim不会
大家看到的注释就完美表达了crontab文件的语法
* * * * * user-name command
五个星号表示是 分 时 每月哪一天 月份 周几
* 代表不匹配
a-b 表示这段时间都执行
a,b这个时间点都执行
*/n ,例如*/5 * * * * 表示每隔5分钟执行一次,n为执行的频率
### crontab也分为两种:系统级和用户级
系统级位于/etc/crontab的方法只能root用户使用,crontab -e这种所用用户都可以使用并保存在/var/spool/cron/username,系统级任务不会写入后者。
crontab -e 和/etc/crontab修改语法不一致,/etc/crontab多一个user指定。cron会每分钟读取/etc/crontab和/var/spool/cron/username中的数据内容,因此,只要编辑完/etc/crontab文件并保存之后,
crontab会执行。
那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个运行档,但是 /etc/crontab 可是一个纯文字档,必须用 root 的身份编辑这个文件。
系统级和用户级区别还在于:
MailTo=root:这个字段就是每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。一般不处理就是放在/var/mail/username,所以一般都会将日志信息重定向到null。
crontab -r 也只是删除用户级别的时程表,所有的/var/mail/username 删除所有用户文件,或者加上user删除特定用户时程表,crontab -l 显示的任务也都是用户级任务。
crontab有一点需要大家注意的就是:
周(f5)和 日月(f3)不能并存,比如以下的模式:
0 0 12 12 5 root echo "just test" < 错误的写法
本来你以为12月12日且为星期五才会进行这项工作,无奈的是,系统可能会判定每个星期五作一次,或每年的12月1 2日分别进行,如此一来与你当初的规划就不一样了,得要注意这个地方!上述的写法是不对的
2