linux 系统中如果我们的任务需要在特定的时间完成,我们可以设置计划任务。能够完成这种功能的服务有crontab、at、batch、anacron。
crontab 功能强大,周而复始的执行任务。使用它的前提是系统必须是持续运行状态,且你服务crond处于开启状态,如果没有开启,请使用:
下面命令:
[code]service crond start ----------------启动服务
chkconfig crond on ----------------保证下次启动时随机启动[/code]
crontab可以精确到分,具体使用格式是:
minute hour day month dayofweek command
- minute 分钟 从0到59之间的整数
- hour 小时 从0到23之间的整数
- day 日期 从1到31之间的整数,如果指定了月份,该项必须是那个月的有效日期
- month 月份 从1到12之间的整数,或是英语简写(jan、feb..)
- dayofweek 星期 从0到7之间的整数,0或7代表星期日,或是星期的英文简写如sun、mon
- command 命令 可以是系统命令也可以是定义的脚本,建议写命令是写绝对路径如/bin/ls
创建计划任务:可以使用crontab -e,如果需要为某个用户创建使用contab -u zhangsan -e,默认使用vi编辑器,创建好后保存,这样就会在/var/spool/cron/下面看到一个以用户名命名的文件,这个就是你创建的任务。
几个例子:
每1分钟执行一次command
* * * * * command
* * * * * command
每小时的第3和第15分钟执行
3,15 * * * * command
3,15 * * * * command
在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
3,15 8-11 * * * command每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
3,15 8-11 * * 1 command
每个星期一的上午8点到18每隔两个小时(8,10,12,14, 16 ,18)执行
00 8-18/2 * * 1 command
00 8-18/2 * * 1 command
在上面的例子中各特殊符号的含义:
* 任务有效值
– 整数范围,如8-11意味着8, 9, 10, 11
, 一个系列值指定的一个列表, 如 3,5,7,9
/ 间隔频率,如果0-6/2 相当于0,2,4,6
查看计划任务:使用 crontab -l 可以查看当前登录用户的计划任务,如果想查看指定用户的计划任务使用 contab -u user -l
删除计划任务:使用 crontab -r 可以删除当前登录用户的计划任务,如果想删除指定用户的计划任务使用 contab -u user -r
预设任务:系统中有一些预设的计划任务,可以通过cat /etc/crontab来查看它们的定义,建议不要随便改动这里面的东西
使用控制:在/etc/下面有两个文件cron.allow和cron.deny(如果没有cron.allow可以自己建一个),这两个文件的格式都是每一行一个用户,且不允许有空格,如果文件被修改,不需要重启服务。
无论使用控制文件中的规定如何,root总是可以使用crontab
如果cron.allow文件存在,只有其中列出的用户可以使用crontab,并且cron.deny
如果cron.allow不文件存在,所有在cron.deny中列出的用户都被禁止使用crontab
at 有时我们只想让任务执行一次而不是周而复始的执行,这时可以选择at。
-f 指定从文件中读取,如果没有指定该参数,将从stdin中读取
-v 显示运行任务的时间
-m 向用户发邮件,即使没有stdout
at -f mycron.sh 10pm tomorrow 明天晚上10:00运行我的脚本mycron.sh
使用atq显示任务,用atrm删除任务
[code] atq[/code]
Wed Jul 11 02:00:00 2007 a yanqing
Sat Jul 14 02:00:00 2007 a yanqing
Sun Jul 8 22:00:00 2007 a yanqing
Tue Jul 10 02:00:00 2007 a yanqing
[code]atrm 16 14 15[/code]
batch 只有系统负载在低于0.8时才运行(不常用)
anacron 与cron相似,不过它不要求系统的持续运行。它可以 用来运行通常用cron运行的每日,每周和每月的任务。使用前确保你的服务已经启动,如果没有启动使用
service anacron start
chkconfig anacron on
格式为:
period delay job-identifier command
- period 命令执行的频率(天数)
- delay 延迟时间(分钟)
- job-identifier 任务描述,用于anacron的消息中,并作为任务时间戳文件的名称,只能包括非空白的字符(斜线除外)
- command 要执行的命令
对于每项任务, anacron 先判定该任务是否已在配置文件的 period 字段中指定的期间内被执行了。如果它在给定期间内还没有被执行, anacron 会等待 delay 字段中指定的分钟数,然后执行command 字段中指定的命令;
任务完成后, anacron 在 /var/spool/anacron 目录内的时间戳文件中记录日期;这里只记录日期,无具体时间,而且 job-identifier 的数值被用做时间控制文件的名称。
CentOS安装crontab:
[code]yum install vixie-cron</span>
yum install crontabs[/code]
说明:
vixie-cron软件包是cron的主程序;
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。