Linux任务计划
一、任务计划
(1)未来的某一个时间点执行一次某任务:at、batch
(2)周期性运行某任务
二、at 命令使用
(1) 注意:要执行at时候,必须有atd这个服务的支持才行,在某些新版的destribution中atd默认是没有启动的。不过我们的CentOS默认是启动的
启动方法:~]# /etc/init.d/atd restart
设置开机时启动这个服务:~]# chkconfig atd on
(2)我们使用at这个命令来生成所需要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录内,该工作便能等待atd这个服务的 取用与执行了。
(3)我们可以利用/etc/at.allow与/etc/at.deny这两个文件进行at的使用限制
/etc/at.allow:写在这个文件中的用户才可以使用at
/etc/at.deny:写在这个文件中的用户不可以使用at
以上两个文件都没有,则表示只有root用户才可以使用
(4)at [OPTION]… TIME
TIME:表示法
A、HH:MM [YYYY-MM]
B、模糊时间表示
noon midnight teatime 、、、
tomorrow
now+#{minutes,hours,days, OR weeks}
常用选项:
-l: 查看作业队列。相当于 atq
-f: /path/to/somefile 从指定文件中读取作业任务,而不在交互式输入
-d:删除制定的业务,相当于atrm
-c:查看指定作业的具体内容
-q QUEUE:指明队列
结束任务编辑用Ctrl+d
注意:作业的执行结果是以邮件的形式发送给提交作业用户
(5)执行方式:
1)交互式
2)输入重定向
3) at –f 文件
(6)示例:
创建任务
查看任务
、、、
注意:
数字“2”表示任务队列号
(7)取消任务
三、batch 命令
会让系统自动选择在系统资源比较闲的时间去执行指定的任务
与at命令使用一样
四、周期性任务计划:cron
(1)cron执行的每一项工作都会被记录在/var/log/cron这个日志文件中。
(2) cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron: cronie的补充程序,用于监控cronie任务执行状况,如cron中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务
(3)确保crond守护进程(daemon) 处于运行状态:
查看:
CentOS 7:
sysenctl status crond service
状态:Acitive:Active(running…)
CentOS 6:
service crond status
状态:……..is running
(4)crond任务分两种:
1)、系统crond任务:主要实现系统自身的维护
手动编写/etc/crontab文件
2)、用户crond任务:
要使用crontab命令
注意:向crond提交作业的方式不同于at,他需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令
五、系统cron的配置格式:cat /etc/crontab
1、配置文件
一共7个字段
注意:(1)、每一行定义一个周期性任务
(2)、各个之间用空格隔开
(3)、此处的环境变量不同于用户登录后获取的环境变量,因此,建议命令使用绝对路径,或者自定义PATH环境变量
(4)、各个字段表示什么意思:
1)* * * * * :定义周期性时间
2)user-name:运行任务的用户身份
3)command to executed:什么任务
2、示例:
表示指定用户zq每五分钟用ps命令查看进程信息
六、用户cron的任务
1、配置文件:/var/spool/cron/username(uaername表示一个用户名)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .—————- minute (0 – 59)
# | .————- hour (0 – 23)
# | | .———- day of month (1 – 31)
# | | | .——- month (1 – 12) OR jan,feb,mar,apr …
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
注意:
(1)、每行定义一个cron任务,共六个字段
(2)、此处的环境变量不同于用户登录后获取的环境变量,因此,建议命令使用绝对路径,或者自定义PATH环境变量
(3)、邮件发送给当前用户
2、crontab 命令
crontab [-u user] [-l | -r | -e] [-i] [-s]
(1)选项:
-e :编辑任务
-l :列出所有任务
-r :移除所有任务:即删除/var/spool/cron/username文件
-i :在使用-r选项时提示用户交互
-u user :root用户可为指定用户管理cron任务
3、示例:
(1)使用 crontab -e 进入编辑页面,进行任务制定
(2)查看任务
(3)移除任务
注意:
(1)、运行结果以邮件形式通知给当前用户; 如果拒绝接收邮件
1)、COMMAND > /dev/null
2)、COMMAND &> /dev/null
(2)、定义COMMAND时候,如果命令需要用到%,这时候需要对其转义;但放置于单引号中的%不用转义
七、周期性任务时间表示法:
1、特定值。
给定时间点有效取值范围内的值
注意:day of week 和day of month 一般不同时使用
2、*
给定时间点上有效取值范围内的所有制:表示 “每、、、”
示例:
(1)、3****:每小时执行一次,每小时的第三分钟
(2)、34**5:每周执行一次,每周五的四点三分
(3)、567**:每月执行一次,每月七号六点五分
(4)、78910*:每年执行一次,每年的十月九号八点七分
3、离散取值:
在给定时间点上使用逗号分隔的多个值
#,#,#
示例:
(5)、98**3,7:每周三和周日的八点九分
(6)、08,20**3,7:每周三和周日的八点零分和二十点零分
4、连续取值方式
在给定的时间点上使用‘–’连接开头和结束
#-#
示例:
(7):0 9-18 * * 1-5:工作时间上的每个小时
5、在指定时间上,定义步进长度:/
*/#
/#:即步长
示例:
(8)、*/5 * * * *:每五分钟执行一次任务
注意:
1、制定的时间点上不能被步长整除时候,其意义将不复存在。
2、最小时间单位为“分钟”,想要完成“秒”级别的任务就得需要额外其它机制
定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次
原创文章,作者:zq,如若转载,请注明出处:http://www.178linux.com/75559