什么是定时任务?

  linux系统自身定期执行的任务和工作:

    轮训系统日志、备份系统数据、清理缓存等

var/log/messages        # 系统日志文件,

ll /etc/|grep cron          #  查询定时任务配置文件

cat /etc/logrotate.d/syslog

cat /etc/logrotate.conf       # 控制日志配置

一般来讲,不需要管

  用户执行的任务工作,也就是运维管理员执行的任务和工作

linux系统下定时软件种类

定时软件有: at, crontab, anacron

at: 适合仅执行一次就结束的调度任务

crontab:可以周期性执行任务工作

crontab命令

-l     list          查看crontab文件内容

-e    eidit        编辑crontab文件内容

-r                   删除crontab文件内容,很少用

-i                   删除crontab文件内容,会提示,很少用

-u             指定使用的用户执行任务

crontab -e         # 等价于 vi /var/spool/cron/root
crontab -l # 等价于cat /var/spool/cron/root # crontab {-l | -e} 实际上是在操作 /var/spool/cron/当前用户 这样的文件
# 通过这两个命令编辑定时任务和查询设置好的定时任务

  配置定时任务有两个地方, /var/spool/cron/目录下 或 /etc/crontab 中配置,但最好不要在/etc/crontab中配置

  /etc/crontab 中有 7个字段

cat /etc/crontab    # 查看定时任务相关字段

  分、时、日、月、周 、cmd

0-59, 0-23, 01-31, 01-12, 0-7 (0和7表示星期天)

cmd 执行的任务,包含2个部分,命令解释器绝对路径, 程序所在绝对路径

  问题: 因为定时任务执行完会给对应用户发邮件,但是邮件服务生产环境下默认不开,就有可能因此产生大量的小文件,大量占用磁盘的inode,从而产生让磁盘满但是通过df -h 还有剩余空间的现象

  方法: 定时任务后面添加 >/dev/null 2>&1 ,表示错误或者正确 输出都扔到垃圾箱

crontab中特殊的字符

*      表示任意时间都,“每”的意思

例子:

* 23 * * * cmd, 表示每月每周每日23:00都执行cmd任务

-  减号表示分隔,如 17-19,表示每天 17 18 19 点 00 分执行任务

,   逗号,表示分隔时段的意思, 30 17,18,19 * * * cmd    每天 17 18 19 点半执行cmd任务

/n    n表示数字,即每隔n单位时间, 如每分钟执行一次任务可以写成, */10 * * * * cmd,也可以写成 0-59/10 * * * * cmd

30 3,12 * * * cmd      # 每天凌晨3点半和中午12点半执行任务

30 6 * * * cmd        # 每隔6个小时的半点时刻执行任务

30 21 * * * cmd             # 每天晚上21点半,执行任务

30 8-18/2 * * * cmd       # 早晨8点到下午18点隔两小时的半点时刻执行任务

45 4 1,10,22 * * cmd    # 每月1号,10号,22号的凌晨4点45分执行任务

00 */1 * * * cmd          # 每天每隔1个小时整执行任务

* 23,00-07/1 * * *       #每天23点 和早上0-7点之间每隔一个小时每分钟都执行这个任务,这个写法不规范

00 11 * 4 1-3 cmd         # 4月每周周一到周三 上午11点整执行任务

# 周和日尽量不要同时使用,运维首要原则结果可预测性,建议写 0做小于10的数

 

  依赖于 crond 服务

chkconfig --list|grep 'crond'        # 查看对应服务运行级别信息
# 结果 crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# 以上表示 2 3 4 5 级别开机都启动这个服务
chkconfig --level 3 crond # 让服务在 3 级别运行 chkconfig crond on # 默认2345 级别运行 # chkconfig crond off # 取消 2345 级别运行

  

工作中如何调试定时任务?

  1. 增加执行任务频率

    时间间隔为1分钟或系统时间后5分钟

  2. 某些任务不能用于生产环境,没有调试机会

  3. 调整系统时间调试任务,保持5分钟(不能用于生产环境)

  4. 通过脚本日志输出调试定时任务

  5. 通过定时任务调试

  注意环境变量带来定时任务故障

例如:

标准输出多个, 多个标准输出

路径没写全,命令写全路径或者通过export PATH 把环境变量写入其中

代码、配置变更发布流程是什么?

个人开发环境  > 办公测试环境 > IDC机房测试 > IDC正式环境(分组,灰度发布)

假如脚本和配置都没问题,但是定时任务并没执行,那是什么原因?

  1. 脚本是否有 r x两个权限
  2. Java脚本时候,注意是否和系统环境变量冲突,变量重新定义
  3. 脚本路径是否是全路径,路径是否正确

定时任务总结:

  1. 通过 crontab -e 来进行定时任务编辑,会检查语法错误,通过crontab -l 查看当前用户的定时任务

  2. crontab 命令更改 /var/spool/cron/用户 文件

  3. 定时任务执行时,会给当前用户发送邮件,如果当前用户没有启动邮件服务,将会产生大量小文件占有inode空间,需要在每个定时任何后面添加 >/dev/null 2>&1

  4. 定时任务的命令解释器和命令代码文件,需要给出绝对路径

  5. 任何调试,都不能在生产环境,调试时候注意文件是否有读和执行权限,注意Java脚本是否与环境变量冲突

  6. * 表示每, - 表示从什么到什么, /n 间隔单位时间, , 并列时间段

  7. 周 和 日 这两个不能同时设置,不然增加不可预测性

  8. 分 时 日 月 周, 除了周,时间从小到大

相关定时任务  

  1. 在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到 /dev/null设备

15 3 * * 06 /bin/bash /home/shell/collect.pl > /dev/null 2>&1

  2. crontab在11月份内,每天的早上6点到12点中,每隔两个小时执行一次 /usr/bin/httpd.sh,怎么实现

00 6-12/2 * 11 * /bin/bash /usr/bin/httpd.sh > /dev/null 2>&1

  3. 每5分钟,通过 time1.aliyun.com 获得授时服务,更改系统时间

*/5 * * * * /bin/bash /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1

  

linux_定时任务的更多相关文章

  1. linux_添加定时任务,每5min清理下某个文件夹下的文件

    性能测试的过程中会生成大量的日志文件,导致无法继续进行,linux可以增加一个定时任务,进行定时清理 1. 先编写一个sh脚本,该sh脚本用于文件夹文件清理,脚本编写完成后拷贝到服务器上,且授予权限 ...

  2. Java定时任务的常用实现

    Java的定时任务有以下几种常用的实现方式: 1)Timer 2)ScheduledThreadPoolExecutor 3)Spring中集成Cron Quartz 接下来依次介绍这几类具体实现的方 ...

  3. [转]Java实现定时任务的三种方法

    在应用里经常都有用到在后台跑定时任务的需求.举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据.文件等.在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 Tim ...

  4. 使用python crontab设置linux定时任务

    熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用 ...

  5. C#定时任务组件之FluentScheduler

    FluentScheduler是.NET开源处理定时任务组件 1.任务的创建注册 public static void TaskActionByMinutes(Action action, int c ...

  6. 浅谈 linux 例行性工作 crontab (linux定时任务)

    定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...

  7. SpringMVC中定时任务配置

    在项目中使用定时任务是常有的事,比如每天定时进行数据同步或者备份等等. 以前在从事C语言开发的时候,定时任务都是通过写个shell脚本,然后添加到linux定时任务中进行调度的. 现在使用Spring ...

  8. springboot(九):定时任务

    在我们的项目开发过程中,经常需要定时任务来帮助我们来做一些内容,springboot默认已经帮我们实行了,只需要添加相应的注解就可以实现 1.pom包配置 pom包里面只需要引入springboot ...

  9. 详解java定时任务

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析JavaTimer定时器. ...

随机推荐

  1. [Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等

    本課主題 通过 Spark-shell 窥探程序运行时的状况 TaskScheduler 与 SchedulerBackend 之间的关系 FIFO 与 FAIR 两种调度模式彻底解密 Task 数据 ...

  2. mysql之其他

    一 IDE工具介绍 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: 1. 测试+链接数据库 2. 新建库 3. 新建表,新增字段+类型+约束 4. 设计表:外键 5 ...

  3. SAP的这三款CRM解决方案,您能区分清楚么

    我的一位同事, John Burton, 在2017年12月底写过一篇博文:Explaining SAP's portfolio of "CRM Service" related ...

  4. win10 uwp 横向 AppBarButton

    一般看到的 AppBarButton 都是图片在上面,文字在下面,是否可以更改让文字在和图片相同的位置?本文告诉大家如何做出横向的 AppBarButton 把图标和文本放在一起. 如果需要添加 Ap ...

  5. es6 模板字变量和字符串占位符

    开发者一直在寻找一种创建多行字符串的形式,但要使用单引号双引号字符串一定要在同一行才行. 老办法: 还有其他办法,虽然能实现,但是太啰嗦 es6模板自变量 使用反撇好(`)替换了单双引号 反撇好中的所 ...

  6. 【Java学习笔记之十九】super在Java继承中的用法小结

    1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量: 2)在一个构造函数中调用另外一 ...

  7. Effective Java 第三版——23. 优先使用类层次而不是标签类

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  8. c++(查找)

    无论是数据库,还是普通的ERP系统,查找功能数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数 ...

  9. CSS中的定位与浮动

    CSS中的定位与浮动 本文主要讲述CSS中的三种定位样式static.relative和absolute的区别以及浮动元素的特征. 定位样式 CSS中定位样式position的取值有三个,默认值:st ...

  10. Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件

    http://blog.csdn.net/rodulf/article/details/71169996 利用ssh传输文件 在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下 ...