25Linux计划任务详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了25Linux计划任务详解相关的知识,希望对你有一定的参考价值。

Linux任务计划

相信每个人都有使用闹钟的习惯,比如提醒一次,工作日提醒,女朋友生日提醒(首先你要先有个女朋友),在设定闹钟之后,我们可以在设定的时间去提醒你做什么事情


Linux计划任务工具介绍

在各类系统上面都有计划任务功能,在linux上面主要两种工具,atcrontab

at命令是专门来执行处理一次性的任务计划的 
crontab可以根据定义的时间周期,循坏的去做一些事情

任务计划分类:

一次性的任务计划:只执行一次就结束 
周期性的任务计划:每隔一定时间就去执行

at一次性任务

假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。

at 是有atd服务提供的,在centos6之上可以使用service atd start 来启动服务,在centos7上面要使用systemctl start atd.service 来启动服务

设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。at类似打印 进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。at now + time命令可以在指示任务。

[[email protected] ~]# rpm -q at
at-3.1.10-48.el6.x86_64
[[email protected] ~]# service atd status
atd (pid  1939) is running...

at 的使用参数

格式:at [-mldvc] TIME

-l at-l 相当于atq命令,列出目前系统上面所有用户的at队列 
-d at-d 相当于atrm命令,可以取消一个在at排程的工作 
-v 可以使用比较明显的时间格式列出at中的工作列表 
-f 把at要执行的所有任务放置于文件中,让at读取此文件作为要运行的任务 
如:at -f /PATH/TO/SOEFILE TIME

time的格式

HH:MM 如2000
   在今日的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 指定在某个时间点再加几个时间后才进行

AT Time案例

-----------------------------------------------------------------------
时 间 例子 说明
-----------------------------------------------------------------------
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任务在晚上1030

注意

1、一定要检查一下atd的服务是否启 动,有些操作系统未必是默认启动的, 
2、查看at执行的具体内容:一般位于/var/spool/at目录下面, 用vi打开,在最后一部分就是你的执行程序

案例

1、设置在20:00 向zhanghe 发邮件

[[email protected] ~]# 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队列

[[email protected] ~]# atq
1   2016-07-25 20:00 a root

3、通过at -c n 查看任务计划的内容

[[email protected] ~]# at -c 1
//里面会有一些坏境变量在里面,看后面有没有我们需要的内容

技术分享

4、如果你发现at任务计划有问题,需要修改,要终止任务计划用 atrm移除

[[email protected] ~]# atq
1   2016-07-25 20:00 a root
[[email protected] ~]# atrm 1
[[email protected] ~]# atq

crontab周期性任务

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列表示分钟159 每分钟用*或者 */1表示
2列表示小时1230表示0点)
3列表示日期131
4列表示月份112
5列标识号星期060表示星期天)
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 * * * 需要执行的命令或者脚本
#每月11022日执行
45 4 1,10,22 * * 需要执行的命令或者脚本
#每天早上610
10 6 * * * 需要执行的命令或者脚本
#每两个小时
0 */2 * * * 需要执行的命令或者脚本
#晚上11点到早上8点之间每两个小时,早上8
0 23-7/28 * * * 需要执行的命令或者脚本
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11
0 11 4 * mon-wed 需要执行的命令或者脚本
#1月份日早上4
0 4 1 jan * 需要执行的命令或者脚本

注意:使用crontab -e编辑的当前用户的计划任务,而对于一些系统级计划任务,root用户可以直接编辑/etc/crontab添加,方法完全一样。

anacron

anacron介绍

对于上面提到的crontab,如果我们的机器不是7*24在线的话,那么它要怎么完成它的工作?这是个问题,不过已经有人解决啦――anacron! anacron 并不能指定何时执行某项任务, 而是以天为单位或者是在开机后立刻运行 anacron 的动作,它会去侦测停机期间应该运行但是并没有运行的 crontab 任务,并将该任务执行一遍后,anacron 就会自动停止了。anacron 会以一天、七天、一个月为期去侦测系统未运行的 crontab 任务,anacron会去分析现在的时间与时间记录文件所记载的上次执行 anacron 的时间,两者比较后若发现有差异, 那就是在某些时刻没有运行 crontab !此时 anacron 就会开始执行未运行的 crontab 任务! 所以 anacron 其实也是透过 crontab 来运作的!

anacron的相关选项

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]

anacron选项

-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

以上是关于25Linux计划任务详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux计划任务,CronTab用法详解

Linux计划任务 Crontab 详解

Linux计划任务入门详解

Linux计划任务 定时任务 Crond 配置详解 crond计划任务调试 sh -x 详解 JAVA脚本环境变量定义

Linux计划任务Crontab实例详解教程

linux(十七) 详解计划任务管理