热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux中的计划任务之crontab

2019独角兽企业重金招聘Python工程师标准linux中的计划任务crontabcrontab:可以从定时重复工作中解脱出来工作中遇到的困难每分钟需要执行一

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

linux中的计划任务crontab

crontab:可以从定时重复工作中解脱出来

工作中遇到的困难

  • 每分钟需要执行一个程序检查系统运行状态
  • 每天凌晨需要对过去一天的业务数据进行统计
  • 每个星期需要把日志文件备份
  • 每个月需要把数据库进行备份

crontab 简介

  • 用于设置周期性被执行的任务工具。
  • 被周期性执行的任务我们称为Cron job
  • 周期性执行的任务列表称为Cron Table

crontab 实践内容简介

  • 相关工具
  • 安装并检查crontab服务
  • crontab的基本组成
  • crontab的配置文件格式
  • crontab工具的使用
  • crontab 的日志
  • crontab 常见的错误

检查cron服务

  • 检查crontab工具是否安装:crontab -l
  • 检查crontab服务是否启动:service crond status

安装cron

  • yum install -y vixie-cron
  • yum install crontabs

案例

[root@xuexi-001 ~]# crontab -e
*/1 * * * * date >> /tmp/log.txt
# 每分钟都打印当前时间到log.txt 文件中
[root@xuexi-001 ~]# tail -f /tmp/log.txt
2018年 10月 05日 星期五 00:00:01 CST
2018年 10月 05日 星期五 00:01:01 CST
2018年 10月 05日 星期五 00:02:01 CST
# tail -f 显示文件的最后几行 ,tail -2 显示文件的最后两行

crontab 基本组成

  • crond 服务 --系统服务
  • 配置文件 --以文件方式设置定时任务
  • 配置工具 -- 用于调整定时任务

crontab 配置文件格式

  • * * * * * COMMAND
  • 第一个 * :分钟 0-59
  • 第二个 * :小时 0-23
  • 第三个 * :日期 1-31
  • 第四个 * :月份 1-12
  • 第五个 * :星期 0-7(0或者7代表星期天)

案例

  • 每晚的21:30重启apache

30 21 * * * service httpd restart

  • 每月的1、10、22日的4:45重启apache

45 4 1,10,22 * * service httpd restart

  • 每月的1到10日的4:45重启apache

45 4 1-10 * * service httpd restart

  • 每隔两分钟重启apache

*/2 * * * * service httpd restart # 偶数分钟
1-59/2 * * * * service httpd restart # 奇数分钟

  • 晚上11点到早上7点之间,每隔一小时重启apache

0 23-7/1 * * * service httpd restart

  • 每天18:00到23:00之间每隔30分钟重启apahce

0,30 18-23 * * * service httpd restart
0-59/30 18-23 * * * service httpd restart

小结

  • * 表示任何时候都匹配
  • 可用“A,B,C” 表示A或者B或者C时执行命令
  • 可用“A-B”表示A-B之间时执行命令
  • 可用“*/A” 表示A分钟(小时等)执行一次命令

crontab工具的使用

crontab 选项:

  • -u: define user
  • -e: edit user's crontab
  • -l: list user's crontab
  • -r: delete user's crontab

案例

1、给root 用户添加计划任务:每隔两分钟(奇数分钟)打印 “JISHU**********”

[root@xuexi-001 ~]# crontab -e
1-59/2 * * * * echo "JISHU***********************"

2、添加普通用户 crontester 并且添加计划任务:每隔两分钟(偶数分钟)打印“EVEN**************”

[root@xuexi-001 ~]# useradd crontester
[root@xuexi-001 ~]# crontab -e -u crontester
[root@xuexi-001 ~]# crontab -l -u crontester
0-58/2 * * * * echo "EVEN ************"

查看日志

[root@xuexi-001 ~]# tail -f /var/log/cron
Oct 5 00:51:01 xuexi-001 CROND[1906]: (root) CMD (echo "JISHU***********************")
Oct 5 00:52:01 xuexi-001 CROND[1911]: (crontester) CMD (echo "EVEN ************")

crontab 配置文件

  • 全局(系统)配置文件
  • /etc/crontab
  • 注意格式

crontab 日志

  • /var/log/cron 文件保存着cron的任务执行记录

[root@xuexi-001 ~]# cd /var/log/
您在 /var/spool/mail/root 中有新邮件
[root@xuexi-001 log]# ls cron*
cron cron-20180611 cron-20180926 cron-20181001
[root@xuexi-001 log]# ls -l cron*
-rw------- 1 root root 23564 10月 5 01:10 cron
-rw-------. 1 root root 10917 6月 11 21:08 cron-20180611
-rw-------. 1 root root 11543 9月 26 20:13 cron-20180926
-rw------- 1 root root 4043 10月 1 13:22 cron-20181001
[root@xuexi-001 log]# tail -f cron
Oct 5 01:04:01 xuexi-001 CROND[2001]: (crontester) CMD (echo "EVEN ************")
Oct 5 01:04:49 xuexi-001 crontab[2005]: (root) LIST (root)
Oct 5 01:04:49 xuexi-001 crontab[2005]: PAM pam_end: NULL pam handle passed
Oct 5 01:05:01 xuexi-001 CROND[2007]: (root) CMD (echo "JISHU***********************")
Oct 5 01:06:01 xuexi-001 CROND[2014]: (crontester) CMD (echo "EVEN ************")
Oct 5 01:07:01 xuexi-001 CROND[2020]: (root) CMD (echo "JISHU***********************")
Oct 5 01:08:01 xuexi-001 CROND[2026]: (crontester) CMD (echo "EVEN ************")
Oct 5 01:09:01 xuexi-001 CROND[2032]: (root) CMD (echo "JISHU***********************")

crontab 常见错误

  • 环境变量
  • 命令行双引号中使用%时,未加反斜线\
  • 第三和第五个域之间执行的是“或”操作
  • 分钟设置误用

  • 第三和第五个域之间执行的是“或”操作

案例

  • 四月的第一个星期日早晨1时59分钟运行a.sh

59 1 1-7 4 * test`date + \%w` -eq 0 && /root/a.sh

  • 分钟设置误用

案例

  • 两小时运行一次

错误示例:
* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date正确示例:
0 */2 * * * date

说明

在使用分钟的时候如果使用的分钟时使用 * 那么就是每两个小时的每分钟都会执行。正确的应该设置为 0,还有就是在使用分钟设置时,要注意分钟的约束,比如1-10/2,先满足1-10之间的每两分钟也就是1,3,5,7,9的时候执行,在11分钟的时候就不执行了。


转:https://my.oschina.net/u/3850965/blog/2222907



推荐阅读
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了如何通过conda安装Selenium的wheel文件,包括查看环境、卸载旧版本、下载新版本的wheel文件以及安装操作的步骤。同时提供了使用清华源的方法。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
author-avatar
卜弃miao_286
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有