Linux 任务计划之crontab命令
前几天,由于要备份ORACLE数据,学用了一下crontab命令,摘录在此以备忘。
相比用于安排一次性任务的at命令,crontab命令主要是用于安排一些周期性的任务,比如 定期备份数据、定时杀毒、定期清理垃圾文件等。 Linux中的cron进程是一个主要的系统调度进程,可以在后台自动完成用户指定的任务 计划。它每分钟检查一遍各个用户的“”任务计划书“”--也就是crontab文件,如果计划书 中所指定的运行条件满足,就立即为用户执行计划书中的任务。那么,这个计划书放在哪儿 呢?就放在/var/spool/cron/crontabs目录下面。这些计划书是什么样的文件,有什么特别 之外吗?其实它们就只是普通的文本文件,唯一的不同是有两点要求:
1. 命名:计划书的名称与计划书所属的用户名相同。
2. 格式: minute hour day month weekday command
取值范围: (0-59) (0-24) (1-31) (1-12) (0-6)
系统提供了几个特殊符号,使得时间的表示很灵活: *、/、&和-,其中*代表取值范围内的所有数字,/代表每的意思,*/5表示每5个单位,-表示 指定的时间段,","用于列举多个数字。
举例说明:
0 0 * * 1 echo Monday >> /home/test.txt ---每个星期一凌晨执行
* * * * date >> /home/date.txt ---每分钟执行一次
*/10 * * * 1-3 echo "ten minutes pasted" >> /home/time.txt ---星期一到三每10分钟执行一次。
通常,系统并不允许用户直接编辑计划书,/var/spool/cron/crontabs目录也只有root用户 才可读写。为了方便计划书的管理,系统提供了crontab命令:
用法:
crontab [ -u user ] 文件名
crontab [ -u user ] { -l | -r | -e }
-u 计划书所属的用户,默认为当前用户
-l 列出当前计划书的内容
-e 编辑计划书,系统默认的编辑器是vi。保存时,系统会检查格式是否符合要求。
-r 删除计划书
举例说明:
#crontab -u oracle /home/oracle/plan.txt 将plan.txt提交为用户oracle的计划书
#crontab /home/myplan.txt 将myplan.txt提交为当前用户的计划书 #contab -r 清除当前的计划书
几点补充:
1. 环境变量,cron进程执行任务时,并不加载计划书所属用户的环境变量,只加载几个最 基本的环境变量,比如执行任务的sh,$HOME,$MAILTO等。这几个环境变量的定义是在 /etc/crontab文件中。其中$MAILTO是指定计划执行过程中发生错误或者有数据输出时发 送邮件到哪个用户。
2. 不能运行crontab命令或者计划没有被执行,crontab的权限设置是由两个文件来决定的 :/etc/cron.allow, /etc/cron.deny。如果存在/etc/cron.allow,则把要执行计划的 用户名称添加到其中;若/etc/cron.deny存在,则确保要执行计划的用户名称不在 /etc/cron.deny中;如果两个文件都存在,/etc/cron.allow优先。
3. crontab 文件名,提交了新计划文件之后,原来的计划是否还在呢?答案是否定的。这 种方法进行的是完全覆盖,而非追加。同时要说明的是,当运行命令:crontab newplan.txt 之后,系统复制了一份newplan.txt的内容用来创建该用户的计划书,存 放到/var/spool/cron/crontabs目录下,newplan.txt与计划之间并无联系。但建议将其 保留,作为计划书的副本。当要修改计划时,可先修改newplan.txt,然后再提交为新计划。
4. 计划书的输出和日志,如果用户的计划书在运行时有输出,用户是无法直接从终端上看 到的。cron进程会将执行计划时产生的所有输出数据和错误信息发送到指定用户的邮箱 ,用户可到邮箱中去查看,所以建议在计划中把有用的输出数据重定向到文件中。要想 查看各个计划的执行情况,可以查看cron进程的日志文件:/var/log/cron。
5. 更简单的任务计划, 如果觉得这样麻烦,还有一种简单的方法。/etc下面有4个目录: cron.hourly,cron.daily,cron.weekly,cron.weekly,这4个目录下脚本的执行周期 分别是每小时,每天,每周,每月。根据自己的需要,将要运行的脚本直接放置到对应 的目录下即可,系统会自动为你完成任务。
2007年4月