相信每个人都有使用闹钟的习惯,比如提醒一次,工作日提醒,女朋友生日提醒(首先你要先有个女朋友),在设定闹钟之后,我们可以在设定的时间去提醒你做什么事情
在各类系统上面都有计划任务功能,在linux上面主要两种工具,
at
和crontab
at命令是专门来执行处理一次性的任务计划的
crontab可以根据定义的时间周期,循坏的去做一些事情
一次性的任务计划
:只执行一次就结束周期性的任务计划
:每隔一定时间就去执行
假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。
at 是有atd服务提供的,在centos6之上可以使用service atd start 来启动服务,在centos7上面要使用systemctl start atd.service 来启动服务
设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。at类似打印 进程,会把任务放到/var/spool/at
目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time
命令时,它发送一个个命令,可以输入任意命令或者程序。at now + time
命令可以在指示任务。
[root@localhost ~]# rpm -q at
at-3.1.10-48.el6.x86_64
[root@localhost ~]# service atd status
atd (pid 1939) is running...
格式:at [-mldvc] TIME
-l
at-l 相当于atq命令,列出目前系统上面所有用户的at队列 -d
at-d 相当于atrm命令,可以取消一个在at排程的工作 -v
可以使用比较明显的时间格式列出at中的工作列表 -f
把at要执行的所有任务放置于文件中,让at读取此文件作为要运行的任务 如:at -f /PATH/TO/SOEFILE TIME
HH:MM 如20:00
在今日的HH:MM时刻进行,若该时刻已超过,则明天的HH:MM进行此工作
HH:MM YYYY-MM-DD 如:20:00 2016-09-10
强制规定在某年某月的某一天的特殊时刻进行该工作
HH:MM[am|pm] [Month] [Date]:如 04pm March 17
也是一样,强制规定在某年某月的某一天的特殊时刻进行该工作
HH:MM[am|pm] +number [minutes|hours|days|weeks];
如now +5 minutes 或者 04pm +3 days 指定在某个时间点再加几个时间后才进行
-----------------------------------------------------------------------
时 间 例子 说明
-----------------------------------------------------------------------
Minuteat now + 5 minutes任务在5分钟后运行
Hour at now + 1 hour 任务在1小时后运行
Days at now + 3 days 任务在3天后运行
Weeks at now + 2 weeks 任务在两周后运行
Fixed at midnight 任务在午夜运行
Fixed at 10:30pm任务在晚上10点30分
1、一定要检查一下
atd
的服务是否启 动,有些操作系统未必是默认启动的,
2、查看at执行的具体内容:一般位于/var/spool/at
目录下面, 用vi打开,在最后一部分就是你的执行程序
1、设置在20:00 向zhanghe 发邮件
[root@localhost ~]# at 20:00
at> echo "for test" | mail zhanghe -s "test to zhanghe"
at> <EOT>
job 1 at 2016-07-25 20:00
//<EOT>是Ctrl+D按出来的
2、atq查看当前at队列
[root@localhost ~]# atq
1 2016-07-25 20:00 a root
3、通过at -c n 查看任务计划的内容
[root@localhost ~]# at -c 1
//里面会有一些坏境变量在里面,看后面有没有我们需要的内容
4、如果你发现at任务计划有问题,需要修改,要终止任务计划用 atrm移除
[root@localhost ~]# atq
1 2016-07-25 20:00 a root
[root@localhost ~]# atrm 1
[root@localhost ~]# atq
crontab是crond服务提供的启动服务命令如下:
CentOS 7:
systemctl status crond
CentOS 6:
service crond status
cron任务有两类,系统cron和用户cron,系统任务是指系统级别的例行性任务计划,它的定制通过编辑其配置文件/etc/crontab来实现
1、其中前五个*表示对应的时间点
2、user-name 用户身份
3、command 要运行的任务
注意建议在定义cron任务时候,所用到的命令路径要使用绝对路径:,如果是脚本,脚本中的命令使用绝对路径,或者自定义一个拥有完整路径的变量
五个时间点分别是:
*****command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
对于任务运行后的结果,默认邮件发送给任务相关用户,当然也可以丢弃通知,输出重定向
COMMAND &> /dev/null
用户级别的周期性任务计划是通过crontab命令来实现的,其也有对应的配置文件在/var/spool/cron 目录中于用户名同名的文件中,可以通过crontab命令来指定任务计划
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
//
crontab -e //编辑某个用户的cron服务
//比如说root查看自己的cron设置:crontab -u root -l
//再例如,root想删除barlow的cron设置:crontab -u barlow -r
crontab文件的一些例子:
#每分钟执行一次
0-59 * * * * 需要执行的命令或者脚本
#每2分钟执行一次
*/2 * * * * 需要执行的命令或者脚本
#每3分钟执行一次
*/3 * * * * 需要执行的命令或者脚本
#每晚的21:30执行
30 21 * * * 需要执行的命令或者脚本
#每月1、10、22日执行
45 4 1,10,22 * * 需要执行的命令或者脚本
#每天早上6点10分
10 6 * * * 需要执行的命令或者脚本
#每两个小时
0 */2 * * * 需要执行的命令或者脚本
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * 需要执行的命令或者脚本
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed 需要执行的命令或者脚本
#1月份日早上4点
0 4 1 jan * 需要执行的命令或者脚本
注意:使用crontab -e编辑的当前用户的计划任务,而对于一些系统级计划任务,root用户可以直接编辑/etc/crontab添加,方法完全一样。
对于上面提到的crontab,如果我们的机器不是7*24在线的话,那么它要怎么完成它的工作?这是个问题,不过已经有人解决啦――anacron! anacron 并不能指定何时执行某项任务, 而是以天为单位或者是在开机后立刻运行 anacron 的动作,它会去侦测停机期间应该运行但是并没有运行的 crontab 任务,并将该任务执行一遍后,anacron 就会自动停止了。anacron 会以一天、七天、一个月为期去侦测系统未运行的 crontab 任务,anacron会去分析现在的时间与时间记录文件所记载的上次执行 anacron 的时间,两者比较后若发现有差异, 那就是在某些时刻没有运行 crontab !此时 anacron 就会开始执行未运行的 crontab 任务! 所以 anacron 其实也是透过 crontab 来运作的!
anacron [-s] [-f] [-n] [-d] [-q] [-t anacrontab] [-S spooldir] [job]
anacron [-S spooldir] –u [-t anacrontab] [job]
anacron [-V|-h]
anacron –T [-t anacrontab]
-f
强制执行相关作业,忽略时间戳 -u
只更新相关作业的时间戳,不再执行任何作业 -s
顺序执行作业;在前一个作业未完成前不会开始下一个作业 -n
现在、立刻、马上、执行作业! -d
不在后台创建子进程。在这个模式下,acron会将相关信息输出到标准错误流及
Syslog,而作业的输出不受影响 -q
禁止将信息输出到标准错误流,与-d选项合用 -t
some_anacrontab
使用指定的anacrontab而不是默认的anacrontab(/etc/anacrontab) -T
测试anacrontab中是否有错误;若有则提示错误并返回1否则返回0 -S
spooldir
指定时间戳的存放地点spooldir;适用于那些想手动定制anacron的用户 -V
打印版本信息并退出 -h
打印简短的帮助信息并退出
本文出自 “家住海边喜欢浪” 博客,请务必保留此出处http://zhang789.blog.51cto.com/11045979/1851754
原文地址:http://zhang789.blog.51cto.com/11045979/1851754