3.3 计划任务管理
在Windows系统中提供了计划任务,功能就是安排自动运行的任务。Linux提供了对应的命令完成任务管理。
3.3.1 单次任务at
at可以设置在一个指定的时间执行一个指定任务,只能执行一次,使用前确认系统开启了atd服务。如果指定的时间已经过去则会放在第2天执行。at命令的使用方法如示例3-18所示。
【示例3-18】
#明天17点钟,输出时间到指定文件内 [root@localhost ~]# at 17:20 tomorrow at> date >/root/2014.log at> <EOT>
不过,并不是所有用户都可以执行at计划任务。利用/etc/at.allow与/etc/at.deny两个文件来进行at的使用限制。系统首先查找/etc/at.allow文件,写在这个文件中的用户才能使用at,没有在这个文件中的用户则不能使用at。如果/etc/at.allow不存在,就寻找/etc/at.deny文件,若是写在at.deny中的用户则不能使用at,而若是没有在at.deny文件中的用户则可以使用at命令。
3.3.2 周期任务crond
crond在Linux下用来周期性地执行某种任务或等待处理某些事件,如进程监控、日志处理等,和Windows下的计划任务类似。当安装操作系统时默认会安装此服务工具,并且会自动启动crond进程。crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。crond的最小调度单位为分钟。
Linux下的任务调度分为两类:系统任务调度和用户任务调度。
(1)系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab文件如示例3-19所示。
【示例3-19】
前3行用来配置crond任务运行的环境变量:第1行的SHELL变量指定了系统要使用哪个Shell,这里是bash;第2行的PATH变量指定了系统执行命令的路径;第3行的MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;后面的行表示使用的时间格式。
(2)用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致。
在用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为6个字段,前5个字段是时间设定段,即时间格式,第6个字段是要执行的命令段,格式为minute hour day month week command,具体说明参考表3.11。
表3.11 crontab任务设置对应参数说明
其中,crond是Linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,crontab命令常用参数如表3.12所示。
表3.12 crontab命令常用参数说明
crontab的一些使用方法如示例3-20所示。
【示例3-20】
#每月每天每小时的第 0 分钟执行一次 /bin/ls : 0 7 * * * /bin/ls #在 12 月内,每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup : 0 6-12/3 * 12 * /usr/bin/backup # 每两个小时重启一次apache 0 */2 * * * /sbin/service httpd restart